Help
RSS
API
Feed
Maltego
Contact
Domain > theconsultant.net
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-07-22
98.124.60.133
(
ClassC
)
2025-02-07
209.188.94.202
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Fri, 07 Feb 2025 22:27:41 GMTServer: ApacheLast-Modified: Fri, 07 Feb 2025 19:39:55 GMTCache-Control: max-age0Expires: Fri, 07 Feb 2025 22:27:41 GMTVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !doctype html>!--if !IE>html classno-js non-ie langen-US> !endif-->!--if IE 7 >html classno-js ie7 langen-US> !endif-->!--if IE 8 >html classno-js ie8 langen-US> !endif-->!--if IE 9 >html classno-js ie9 langen-US> !endif-->!--if gt IE 9>!-->html classno-js langen-US> !--!endif-->head>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>meta nametheme-color content>link relprofile hrefhttp://gmpg.org/xfn/11>title>theconsultant.net – Simplicity is complicated./title>style idrocket-critical-css>.wp-block-media-text .wp-block-media-text__media{grid-area:media-text-media;margin:0}.wp-block-media-text .wp-block-media-text__content{grid-area:media-text-content;padding:0 8%;word-break:break-word}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,header,main,nav{display:block}a{background-color:transparent}h1{margin:.67em 0;font-size:2em}pre{overflow:auto}pre{font-family:monospace,monospace;font-size:1em}button,input{margin:0;font:inherit;color:inherit}button{overflow:visible}button{text-transform:none}button{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}@font-face{font-family:Glyphicons Halflings;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format(svg)}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-search:before{content:\e003}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}p{margin:0 0 10px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul{margin-top:0;margin-bottom:10px}pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-md-4,.col-md-8,.col-sm-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:768px){.col-sm-12{float:left}.col-sm-12{width:100%}}@media (min-width:992px){.col-md-4,.col-md-8{float:left}.col-md-8{width:66.66666667%}.col-md-4{width:33.33333333%}}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;border:1px solid transparent;border-radius:4px}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.collapse{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-btn:last-child>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:last-child>.btn{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse{border-color:#e7e7e7}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.container:after,.container:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{display:table;content: }.container:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}@-ms-viewport{width:device-width}.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-angle-up:before{content:\f106}.fa-calendar-alt:before{content:\f073}.fa-user:before{content:\f007}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.svg#fontawesome) format(svg)}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.svg#fontawesome) format(svg)}.fa{font-family:Font Awesome\ 5 Free}.fa{font-weight:900}body{color:#6B6B6B;background-color:#F2F2F2;word-wrap:break-word;font-family:Open Sans,sans-serif;line-height:1.7;font-size:14px}a{color:#DA4453;text-decoration:none}pre{width:100%;white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}h1,h2,h3{color:#DA4453;font-weight:700;font-family:Roboto Slab,serif}h1{font-size:28px}h2{font-size:24px}h3{font-size:20px}button,input{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}inputtypetext{color:#666;border:1px solid #E8E8E8;border-radius:3px}inputtypetext{padding:3px}.side-pull-left .main-content-inner{float:left}.screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important}.entry-content:before,.entry-content:after,.site-header:before,.site-header:after,.site-content:before,.site-content:after{content:;display:table}.entry-content:after,.site-header:after,.site-content:after{clear:both}.hentry{margin:0}.byline,.updated{display:none}.group-blog .byline{display:inline;margin-right:0}.entry-content{margin:1.5em 0 0}.main-content-area{margin-top:40px;margin-bottom:40px}.entry-meta a{font-size:13px;color:#6B6B6B}.entry-meta{margin-bottom:30px}.page-header{margin-top:0;border-bottom:0;padding-bottom:0}.entry-meta{font-size:14px;margin-right:3px}.entry-meta span{margin-right:10px}.entry-title{color:#444;font-size:28px;margin-bottom:30px}.entry-title a{color:#444}.blog-item-wrap{margin-bottom:50px}.post-inner-content{padding:45px 50px;background-color:#fff;border:1px solid #dadada;border-top:none}body.blog .post-inner-content{border-top:1px solid #dadada;}.entry-title{margin-top:0}.widget ul li{list-style:none;border-bottom:1px solid #F2F2F2;margin-bottom:10px;padding-bottom:10px}.widget ul{padding:0;line-height:18px;font-size:14px}#secondary .widget{margin-bottom:50px;color:#C1C0C0;overflow:hidden}#secondary .widget:last-child{margin-bottom:0px}.well{background-color:#fff;padding:30px;border:1px solid #DADADA;overflow:hidden;clear:both}#secondary .widget>h3{font-size:14px;text-transform:uppercase;margin-bottom:25px;margin-top:0;color:#636467}#secondary .widget a{color:#C1C0C0}@media (max-width:767px){#secondary{clear:both}}.btn-default{background-color:#DA4453;border-color:#DA4453}.btn.btn-default{color:#FFF;text-transform:uppercase}.input-group-btn:last-child>.btn{margin-left:0}button{background-color:#DA4453;border:none;text-transform:uppercase;-webkit-border-radius:4px;border-radius:4px;color:#fff;font-size:12px;padding:5px 12px}#logo .site-name{font-weight:bold;margin:0}.nav>li>a{text-transform:uppercase}.navbar.navbar-default{background-color:#363636;font-family:Open Sans,serif;margin-bottom:0;font-weight:500}.navbar-default .navbar-nav>li>a{color:#F5F7FA;line-height:40px;text-transform:uppercase;font-size:12px}.navbar>.container .navbar-brand{color:#DADADA;font-size:20px;margin:10px 0;font-family:Roboto Slab,serif}.navbar{border-radius:0}.navbar-default{border:none}.navbar-nav>li{padding:15px;color:#F5F7FA}.navbar-nav>li>a{padding:0;display:inline-block}.nav.navbar-nav{float:right}@media (max-width:767px){.nav.navbar-nav{float:none}.navbar>.container .navbar-brand{margin:0}.navbar-default .navbar-nav>li>a{line-height:20px;padding-top:10px;padding-bottom:10px}}@media (max-width:767px){.post-inner-content{padding:20px 25px}}.scroll-to-top{background:#363636;background:rgba(100,100,100,0.4);color:#FFF;bottom:4%;display:none;position:fixed;right:20px;z-index:999;font-size:16px;text-align:center;line-height:40px;width:40px;border-radius:4px}@media (max-width:992px){.side-pull-left .main-content-inner{float:none}}buttontypesubmit{display:none}buttontypesubmit{display:block}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}/style>link relpreload data-rocket-preload asstyle hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap />link relstylesheet hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap mediaprint onloadthis.mediaall />noscript>link relstylesheet hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap />/noscript>meta namerobots contentmax-image-preview:large /> style>img:is(sizesauto i, sizes^auto, i) { contain-intrinsic-size: 3000px 1500px }/style> link reldns-prefetch href//fonts.googleapis.com />link hrefhttps://fonts.gstatic.com crossorigin relpreconnect />link relalternate typeapplication/rss+xml titletheconsultant.net » Feed hrefhttps://theconsultant.net/feed/ />link relalternate typeapplication/rss+xml titletheconsultant.net » Comments Feed hrefhttps://theconsultant.net/comments/feed/ />style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/plugins/gutenberg/build/block-library/style.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}/style>link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/style.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />script typetext/javascript srchttp://theconsultant.net/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>link relhttps://api.w.org/ hrefhttps://theconsultant.net/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://theconsultant.net/xmlrpc.php?rsd />style typetext/css>/style> style typetext/css> .navbar > .container .navbar-brand { color: #dadada; } /style> script>/*! loadCSS relpreload polyfill. c2017 Filament Group, Inc. MIT License */(function(w){use strict;if(!w.loadCSS){w.loadCSSfunction(){}}var rploadCSS.relpreload{};rp.support(function(){var ret;try{retw.document.createElement(link).relList.supports(preload)}catch(e){ret!1}return function(){return ret}})();rp.bindMediaTogglefunction(link){var finalMedialink.media||all;function enableStylesheet(){link.mediafinalMedia}if(link.addEventListener){link.addEventListener(load,enableStylesheet)}else if(link.attachEvent){link.attachEvent(onload,enableStylesheet)}setTimeout(function(){link.relstylesheet;link.mediaonly x});setTimeout(enableStylesheet,3000)};rp.polyfunction(){if(rp.support()){return}var linksw.document.getElementsByTagName(link);for(var i0;ilinks.length;i++){var linklinksi;if(link.relpreload&&link.getAttribute(as)style&&!link.getAttribute(data-loadcss)){link.setAttribute(data-loadcss,!0);rp.bindMediaToggle(link)}}};if(!rp.support()){rp.poly();var runw.setInterval(rp.poly,500);if(w.addEventListener){w.addEventListener(load,function(){rp.poly();w.clearInterval(run)})}else if(w.attachEvent){w.attachEvent(onload,function(){rp.poly();w.clearInterval(run)})}}if(typeof exports!undefined){exports.loadCSSloadCSS}else{w.loadCSSloadCSS}}(typeof global!undefined?global:this))/script>style idrocket-lazyrender-inline-css>data-wpr-lazyrender {content-visibility: auto;}/style>meta namegenerator contentWP Rocket 3.18.1.4 data-wpr-featureswpr_defer_js wpr_minify_concatenate_js wpr_async_css wpr_automatic_lazy_rendering wpr_minify_css wpr_desktop />/head>body classhome blog group-blog> a classsr-only sr-only-focusable href#content>Skip to main content/a>div idpage classhfeed site> header idmasthead classsite-header rolebanner> nav classnavbar navbar-default rolenavigation> div classcontainer> div classrow> div classsite-navigation-inner col-sm-12> div classnavbar-header> div idlogo> h1 classsite-name> a classnavbar-brand hrefhttps://theconsultant.net/ titletheconsultant.net relhome>theconsultant.net/a> /h1> /div>!-- end of #logo --> button typebutton classbtn navbar-toggle data-togglecollapse data-target.navbar-ex1-collapse> span classsr-only>Toggle navigation/span> span classicon-bar>/span> span classicon-bar>/span> span classicon-bar>/span> /button> /div> div classcollapse navbar-collapse navbar-ex1-collapse>ul idmenu-standard classnav navbar-nav>li idmenu-item-280 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-280>a hrefhttps://theconsultant.net/about-dave/>About Dave/a>/li>/ul>/div> /div> /div> /div> /nav>!-- .site-navigation --> /header>!-- #masthead --> div idcontent classsite-content> div classtop-section> /div> div classcontainer main-content-area> div classrow side-pull-left> div classmain-content-inner col-sm-12 col-md-8> div idprimary classcontent-area> main idmain classsite-main rolemain> article idpost-605 classpost-605 post type-post status-publish format-standard hentry category-command-line category-python> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ titleSomedays I write more bugs than code… > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ relbookmark>Somedays I write more bugs than code…/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ relbookmark>time classentry-date published datetime2019-09-17T15:55:30-04:00>September 17, 2019/time>time classupdated datetime2019-09-17T15:56:26-04:00>September 17, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>I posted recently that I had started on a hrefhttps://codechalleng.es/bites/>Bites of Py Exercises/a>, and i’m glad to say I have finished a few more. Small wins are good!/p>p>Along the way i’ve discovered, thanks again to the a hrefhttps://pythonbytes.fm/episodes/show/145/the-python-3-y2k-problem>Python Bytes podcast/a>, a new way to see crashes in my scripts. Currently I am working slowly towards scraping my favorite wallpapers from a hrefhttps://wallhaven.cc>wallhaven.cc/a> and downloading them. But, as I mention in the title, I seem to be better at writing bugs than functional code./p>p>When a script crashes in Python you get a traceback, which seems to be a backwards listing of the things that caused the crash. With practice I will get better at making sense of things like this:/p>pre classwp-block-preformatted>Traceback (most recent call last): File wff-selenium-no-login.py, line 6, in from urllib import Request ImportError: cannot import name Request from urllib NameError: name Request is not defined File wff-selenium-no-login.py, line 24, in req request(wallpaper, headers {User-Agent: Mozilla/5.0}) TypeError: module object is not callable/pre>p>But thanks to that a hrefhttps://pythonbytes.fm/episodes/show/145/the-python-3-y2k-problem>episode/a> I learned about a hrefhttps://aroberge.github.io/friendly-traceback-docs/docs/html/>friendly_traceback/a>, which gives me this output instead:/p>pre classwp-block-code>code>Python exception: TypeError: module object is not callableA TypeError is usually caused by trying to combine two incompatible types of objects, by calling a function with the wrong type of object,or by tring to do an operation not allowed on a given type of object.Execution stopped on line 24 of file wff-selenium-no-login.py.-->24: req request(wallpaper, headers {User-Agent: Mozilla/5.0})request: <module urllib.request from /Users/davidr/...>/code>/pre>p>How is this better? Well.. it explains the error, points to the line I need to fix.. and also tells me the module I have issue with. Though I still don’t know what to do to fix it it makes me feel like I have a better handle on it. /p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-599 classpost-599 post type-post status-publish format-standard hentry category-python tag-bites-of-python tag-python-3> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ titleNibbling at Python > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ relbookmark>Nibbling at Python/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ relbookmark>time classentry-date published datetime2019-09-06T17:12:18-04:00>September 6, 2019/time>time classupdated datetime2019-09-06T17:12:21-04:00>September 6, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Learning a hrefhttps://www.python.org>Python/a> has been on my radar for many years. I have made a start at it a few times. The shell scripts, Applescript and even the Hypercard stacks I made back in the day are very useful but not quite enough any longer. Working with teams of software developers and tech support I have accumulated a lot of “em>what programming is and how it works” /em>over the years, so this is not all new./p>p>Recently I listened to another fine episode of a hrefhttps://talkpython.fm/episodes/show/140/level-up-your-python-with-100daysofcode-challenge>Talk Python to Me/a>, this time with Michael, Bob and Julian describing their latest course/adventure, a hrefhttps://training.talkpython.fm/courses/explore_100days_in_python/100-days-of-code-in-python>100 Days of Web./a> I like their style and the project intrigued me so I went and had a look and found a hrefhttps://codechalleng.es/bites/>Bites of Py Exercises/a>.. and decided to jump in. I promptly discovered I had setup an account a year ago. Did I mention i’ve tried getting into Python a few times?/p>p>I’ve managed to complete 3 out of the 4 Intro Bites.. and with that under my belt, here’s a few things that are making it easier as I go along: I bounce around Google a lot trying to figure things out. The a hrefhttps://www.python.org/doc/>pythonstrong> /strong>documentation/a> has lots of examples. a hrefhttps://stackoverflow.com/search?qpython+3>Stackoverflow/a> has answers for everything but can be hard to make heads or tails of. The team at a hrefhttps://realpython.com>RealPython/a> made some fantastic tutorials which definitely helped me understand dicts enough to finish that Bite. But the best has been the Pybites Slack forum. I got really really stuck I went and talked to those folks and they pointed me in the right direction. Thanks!/p>p>Working in the browser is nice, but i’m used to using an editor on my own Mac along with all the tools it brings. So I asked.. and apparently I need to learn a hrefhttps://www.gnu.org/software/emacs/>Emacs/a>. Just kidding. a hrefhttps://code.visualstudio.com>VS Code/a> and a hrefhttps://www.jetbrains.com/pycharm/>PyCharm/a> are both good, along with downloading the Bites and the tests, using git and a hrefhttps://github.com>Github/a> to store your code (and revisions!!!) from which you can then submit your answers. I was already familiar with these tools.. so I gave it a shot. They’re a great distraction from working on Bites. Fiddling with python versions, installing stuff, tweaking settings. Wheee! For now i’m going to stick to usingstrong> /strong>the a hrefhttps://docs.python.org/3/tutorial/interpreter.html>Python Interpreter on the command line/a> to try things out until it works, then code in a hrefhttps://www.barebones.com/products/bbedit/>BBEdit/a> and run the tests on the command line. Once they pass, I copy and paste the code into the web interface. It’s simple and does the job./p>p>As to the Bites themselves? Hey, i’ve done 3 successfully! The first was hard as I really had no idea what I was doing and how the interface worked. I’ve never used tests before. I have expectations of seeing stuff print on screen but it never happened. I was confused! Eventually I figure out how to get it to work.. The second one? Well, as i’ve told my kids, “em>Programming is constant failure with the occasional success./em>” That one I got so frustrated I gave up and read the solution. Yes, you can discuss your solution with others once you give up or solve it. The third one I got eventually.. and the 4th is similar to it but just enough of a difference to throw you off. I felt like I was slogging through each Bite./p>p>By now you’re wondering if I should abandon this as it’s not sounding like fun. Totally the opposite! I’ve learned a ton of new things, and i’ve got a better feel for how to get to the answer without all the distractions around it. Review the goal 4 or 5 times, make an outline of how I think it will work, look up a bunch of things, learn new things, poke around in IDLE until I can get a step to work, code it.. repeat! Eventually the tests pass. Woohoo! I really should be doing my job and instead I spent part of my morning having fun and learning Python. On to Bite 5!/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-588 classpost-588 post type-post status-publish format-standard hentry category-general tag-oc-transpo> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ titleUsing SMS URIs with OC Transpo > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ relbookmark>Using SMS URIs with OC Transpo/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ relbookmark>time classentry-date published datetime2019-03-18T18:43:47-04:00>March 18, 2019/time>time classupdated datetime2019-03-18T18:43:49-04:00>March 18, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Ottawa’s OC Transpo service provides a hrefhttp://www.octranspo.com/go_mobile/text_560-560>real-time bus schedules through text-messages on your cell phone/a>. Basically you text 560560 your stop number, like 7595, with the option to specify a bus, like the number 18. It will shortly reply with a GPS adjusted schedule. In some cases you will be asked to text back a 1 or 2 for specifying the direction, when you are at a transitway stop or loop that services both directions./p>p>There’s a a hrefhttp://www.octranspo.com/mobile/iphone>mobile app for iOS/a>, but I like the simplicity of sending a text without needing to fiddle with an app…/p>p>At some point I ran across an article explaining how to embed an SMS link into a web page (such as a hrefhttps://weblog.west-wind.com/posts/2013/Oct/09/Prefilling-an-SMS-on-Mobile-Devices-with-the-sms-Uri-Scheme>this one/a>) and decided I needed to try it out./p>p>A live example:/p>a hrefsms:560-560&body7040%2019%202>SMS:560-560&body7040%2020%202/a>p>The components:/p>pre classwp-block-preformatted>SMS: defines this as an sms linkbr>560-560 or 560560 is the OCTranspo number to text tobr>&body the contents of the text messagebr>7040 the stop we want data onbr>%20 html code for a spacebr>20 is our bus numberbr>%20 another spacebr>2 as we want to go towards St. Laurent.br>/pre>p>A bunch of these urls got set up and stored in Apple Notes for all the most common stops I use. /p>p>Once you tap one it will load up a new message with the contents defined, touch the send key and wait a few seconds. Here’s the result I got back in this case:/p>pre classwp-block-preformatted>Stop 7040 route 20 St-Laurent at 18:46 to St-Laurent; 19:14 to St-Laurent; 19:44 to St-Laurent./pre>p>Now if only I could figure out how to send it automatically i’d save a whole tap!/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-582 classpost-582 post type-post status-publish format-standard hentry category-command-line tag-sed tag-unix> div classblog-item-wrap> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ titleFun with SED! > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ relbookmark>Fun with SED!/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ relbookmark>time classentry-date published datetime2018-12-26T10:39:46-05:00>December 26, 2018/time>time classupdated datetime2018-12-26T10:39:46-05:00>December 26, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>(Found this sitting in my blog’s drafts folder.. only 11 years old but all of it still just as valid today!)/p>p>A couple of shell scripts for renaming files on the command line./p>pre># Replaces JPG in any file with jpg for ii in * ; do ARG1`echo $ii | sed s/JPG/jpg/g` ; mv $ii $ARG1 ; done/pre>p>Stany’s renaming scripts:/p>pre>#!/bin/bash# Mass REname of english filenames# relies on fixfilename regexp enginePATH$PATH:/Users/stany/binechofor ii in * ; do ARG1`echo $ii | fixfilename ` ; echo -n . ; mv $ii $ARG1 ; doneecho/pre>pre>#!/bin/bash# the fixfilename regexp enginePATH$PATH:/raid0/toolssed s@(@@g;s@)@@g;s/ /_/g;s/\,//g;s/\&/and/g;s/_-_/-/g;s/-_/-/g;s/\!//g;s/\;//g;s/\//g;s/\//g;s/%20/_/g /pre>p>A combined version…/p>pre>#!/bin/bashfor ii in * ; do ARG1`echo $ii | sed s@(@@g | sed s@)@@g | sed s/ /_/g | sed s/\,//g | sed s/\&/and/g | sed s/_-_/-/g | sed s/-_/-/g | sed s/\!//g | sed s/\;//g | sed s/\//g | sed s/\//g | sed s/%20/_/g ` ; echo -n . ; mv $ii $ARG1 ; doneecho/pre>p>This script will remove the first 4 characters of a filename:/p>pre>for ii in * ; do FOO`echo $ii | sed s/^....//g`; echo mv \$ii\ \$FOO\ ; done/pre>p>This will echo what it actually does, and place quotes in front and after each filename. In the code>for ii in */code> bit you can adjust the regex to match the files you need. So code>for ii in *.txt/code> will match all the files ending in .txt/p>p>Remove the echo to run it, or pipe into shell: | sh/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-575 classpost-575 post type-post status-publish format-standard hentry category-uncategorized> div classblog-item-wrap> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ titleIntro to iOS: Thursday Dec. 6 > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ relbookmark>Intro to iOS: Thursday Dec. 6/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ relbookmark>time classentry-date published datetime2018-12-02T21:09:56-05:00>December 2, 2018/time>time classupdated datetime2018-12-02T21:09:58-05:00>December 2, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Tom and I are doing another Intro class this Thursday, Dec. 6th, at 6:30 to 8:30 p.m. at the Main Library Branch./p>p>The class is free but registration is a hrefhttps://biblioottawalibrary.ca/en/event/introduction-ios-0>required/a>.br>/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>p>Join us for an introduction iOS, the operating system that runs iPhones and iPads, with Dave and Tom, founders of the Bytown Mac User Group. ByMUG has been helping Ottawans using Mac and iOS devices since 2006. Bring your device and follow along. No device? No problem! This informative workshop will cover the basics and much more! /p>/blockquote>p>If you are attending and have questions.. please send them in in advance so we can be prepared./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-475 classpost-475 post type-post status-publish format-standard hentry category-applescript tag-applescript> div classblog-item-wrap> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ titleCapture all tabs in Safari as URLs to the clipboard > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ relbookmark>Capture all tabs in Safari as URLs to the clipboard/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ relbookmark>time classentry-date published datetime2017-06-05T16:51:52-04:00>June 5, 2017/time>time classupdated datetime2018-12-26T10:32:51-05:00>December 26, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Sometimes you’re doing research and have a pile of tabs (and windows) open and need to get them into a document to share with coworkers… so I went digging and tweaking and found an Applescript that does the job:/p>div>div>span stylefont-family: Verdana-Bold; color: #000000;>tell/span> span stylefont-family: Verdana-Italic; color: #0000ff;>application/span>span stylefont-family: Verdana; color: #000000;> “Safari”/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>docText/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span>span stylefont-family: Verdana; color: #000000;> “”/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>windowCount/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana-Bold; color: #0000ff;>count/span>span stylefont-family: Verdana; color: #000000;> (/span>span stylefont-family: Verdana-Bold; color: #000000;>every/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana-Bold; color: #000000;>where/span> span stylefont-family: Verdana; color: #6c05d3;>visible/span> span stylefont-family: Verdana-Bold; color: #000000;>is/span> span stylefont-family: Verdana-Italic; color: #6c05d3;>true/span>span stylefont-family: Verdana; color: #000000;>)/span>/div>div styletext-indent: 4ex;>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>repeat/span> span stylefont-family: Verdana-Bold; color: #000000;>with/span> span stylefont-family: Verdana; color: #407f00;>x/span> span stylefont-family: Verdana-Bold; color: #000000;>from/span>span stylefont-family: Verdana; color: #000000;> 1 /span>span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>windowCount/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabCount/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana-Italic; color: #0000ff;>number/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tabs/span> span stylefont-family: Verdana-Bold; color: #000000;>in/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>repeat/span> span stylefont-family: Verdana-Bold; color: #000000;>with/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>from/span>span stylefont-family: Verdana; color: #000000;> 1 /span>span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>tabCount/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabName/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #6c05d3;>name/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tab/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabURL/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #6c05d3;>URL/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tab/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span> span stylefont-family: Verdana-Bold; color: #000000;>as/span> span stylefont-family: Verdana-Italic; color: #0000ff;>string/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>docText/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>docText/span>span stylefont-family: Verdana; color: #000000;> & /span>span stylefont-family: Verdana; color: #407f00;>tabName/span>span stylefont-family: Verdana; color: #000000;> & ” – ” & /span>span stylefont-family: Verdana; color: #407f00;>tabURL/span>span stylefont-family: Verdana; color: #000000;> & /span>span stylefont-family: Verdana; color: #6c05d3;>linefeed/span> span stylefont-family: Verdana-Bold; color: #000000;>as/span> span stylefont-family: Verdana-Italic; color: #0000ff;>string/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>repeat/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #0016a0;>set the clipboard to/span> span stylefont-family: Verdana-Bold; color: #000000;>the/span> span stylefont-family: Verdana; color: #407f00;>docText/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>repeat/span>/div>div>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>tell/span>/div>/div>p>You can save it as a standalone script and run it from there, or stick into a script item in Automator and run it as a service.. or even call it from the command line as an Osascript./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-468 classpost-468 post type-post status-publish format-standard hentry category-ios> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ titlePrinting to PDF on iOS > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ relbookmark>Printing to PDF on iOS/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ relbookmark>time classentry-date published datetime2016-10-18T10:53:48-04:00>October 18, 2016/time>time classupdated datetime2016-10-18T10:54:43-04:00>October 18, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>It turns out to be super easy to print anything to a PDF on an iOS device!/p>blockquote>p>In the Share sheet from any app choose Print. The print preview dialog appears. Now instead of printing “pinch” on the print preview like just as if you’d want to enlarge it. It opens — now as a PDF — in a separate dialog./p>/blockquote>p>From a a hrefhttp://blog.devontechnologies.com/2016/09/print-to-pdf-on-ios/>post on DEVONthink’s blog, the Devonian Times/a>./p>p> /p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-444 classpost-444 post type-post status-publish format-standard hentry category-applescript category-command-line category-macintosh category-tech-support> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ titleLooking up Mac specs.. > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ relbookmark>Looking up Mac specs../a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ relbookmark>time classentry-date published datetime2016-10-01T14:23:56-04:00>October 1, 2016/time>time classupdated datetime2016-10-01T14:37:08-04:00>October 1, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Did I mention I love a hrefhttps://smilesoftware.com/textexpander>TextExpander/a>? Yeah.. so, to make a long story short: clients ask me questions about their computers, upgrades, lifespans, etc. I don’t normally remember all the details of their Macs so I get them to send me the Serial Number (Open the Apple menu, click About This Mac and it should be right there.)/p>p>Once you have it you can go by Apple’s support site and look it up… but that takes too long./p>p>Make a new TextExpander snippet with Applescript as the content type:code>br />property theURL : br />set theURL to http://support.apple.com/specs/# & (the clipboard)br />do shell script open & theURLbr />/code>/p>p>Then you just copy the serial number, and anywhere you can type use code>!specs/code> to invoke it and up pops open Apple spec page a few seconds later./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-430 classpost-430 post type-post status-publish format-standard hentry category-command-line category-mac-os-x category-python> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ titleOpening a pile of urls all at once — updated version! > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ relbookmark>Opening a pile of urls all at once — updated version!/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ relbookmark>time classentry-date published datetime2016-05-11T15:17:40-04:00>May 11, 2016/time>time classupdated datetime2016-05-11T15:20:05-04:00>May 11, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>A a hrefhttp://www.theconsultant.net/2015/08/open-a-pile-of-links-in-browser-tabs-all-at-once/>year or so ago/a> I wrote a post on how to use xargs to open a bunch of urls that were in your clipboard. But it turns out that in newer versions of OS X something broke, deliberately or otherwise, and that method no longer works. Well, it works fine, it’s just *too* fast. So today I needed to check about a hundred urls.. and so it was time to fix that script. I’ve been slowly working on learning Python, so I decided to use that.. and this is what I ended up with:br />code>br />#! /usr/bin/pythonbr />import webbrowserbr />import pyperclipbr />import timebr />url_list pyperclip.paste()br />clean_list url_list.splitlines(False)br />for x in clean_list:/code>br /> code>webbrowser.open(x)/code>br /> code>time.sleep(.5)/code>/p>p>It only took me about an hour 😉/p>p>What does it do? It grabs the clipboard, splits each line inside the clipboard at the return character, and then there is a loop which tells the browser to open the url .. wait a half second and then do it again./p>p>I’d like to figure out how to grab the clipboard and clean it in one line.. but that’s for another day!/p>p>Back to work../p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-416 classpost-416 post type-post status-publish format-standard hentry category-uncategorized> div classblog-item-wrap> a hrefhttps://theconsultant.net/2015/12/all-about-games/ titleAll about games.. > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2015/12/all-about-games/ relbookmark>All about games../a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2015/12/all-about-games/ relbookmark>time classentry-date published datetime2015-12-02T18:12:31-05:00>December 2, 2015/time>time classupdated datetime2015-12-02T18:12:31-05:00>December 2, 2015/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>There are a few places to get Mac games, other than the App Store./p>p>A few of the larger ones:/p>p>a hrefhttp://store.steampowered.com/search/?term&sort_by_ASC&osmac&page1#sort_by_ASC&category1998&osmac&page1>Steam/a> lists 2500 games for Mac.br />a hrefhttps://www.gog.com/games##sortbestselling&systemosx_107&page1>GOG or Good Old Games/a> has 1297 games for Mac.br />a hrefhttp://www.macgamestore.com/listing/New-Releases/?viewastile>macgamestore.com/a>, has hundreds in each category./p>p>There are quite a few others, and reviews of them are available online if you want to know which is better or worse than another, and why./p>p>a hrefhttp://www.gamersgate.com/mac>gamersgate.com/a>br />a hrefhttp://www.gamesrocket.com/PC-Mac/Mac-Games/sort-by-date>gamesrocket.com/a>br />a hrefhttp://www.amazon.com/mac-game-downloads/b?node2899771011>amazon.com/mac-game-downloads/a>br />a hrefhttps://www.gameagent.com>gameagent.com/a>br />a hrefhttp://www.aspyr.com/search?utf8✓&search_term&platform%5B%5DMac&view_optionGrid_View>aspyr.com/a>br />a hrefhttps://www.ubisoft.com/en-CA/game/assassins-creed-syndicate/>ubisoft.com/a>br />a hrefhttp://www.ea.com/uk/mac>ea.com/a>/p>p>The reason we’re here is for games.. and knowing what’s good *before spending money* is important, go read reviews. There are many review sites, and they all have “best of” lists./p>p>http://www.macgamerhq.com/top-games-for-mac//p>p>What do I play?br />More like what do I still play? aka what still works on El Capitan./p>p>a hrefhttps://itunes.apple.com/gb/app/osmos/id408054320?mt12>Osmos/a>br />a hrefhttps://itunes.apple.com/ca/app/enigmo-2/id403388159?mt12>Enigmo/a>/p>p>Quinn, a Tetris game, which you can still download from a hrefhttp://macintoshgarden.org/games/quinn>macintoshgarden.org/a>/p>p>a hrefhttps://itunes.apple.com/ca/app/the-tiny-bang-story/id456287106?mt12>The Tiny Bang Story/a>, a kids puzzle game./p>p>Cave Story “Doukutsu Monogatari” is a great side scroller ported to the Mac. A bit of fiddling required to get it to work, but worth it! Start here: a hrefhttp://www.cavestory.org/download/cave-story.php>http://www.cavestory.org/download/cave-story.php/a>/p>p>Bungie. What else do I need to say? Yep. Halo. Myth, and many more. Halo 5 just came out.. for Xbox. Although Microsoft did port 2 games to iOS (instead of Windows Phone, what a surprise!) : Halo Spartan Assault and Halo Spartan Strike./p>p>Yes, You can still play Halo, from 2004, using a hrefhttp://halomd.net>http://halomd.net/a>br />You can stil play Myth as well, using a hrefhttp://projectmagma.net/what/>Project Magma/a>./p>p>But we’re not limited to just Mac games.. we can run emulators as well. One that I have used on occasion is a hrefhttp://boxerapp.com/games>Boxer/a>, which lets you run DOS games./p>p>Shout out to a hrefhttp://www.ambrosiasw.com>Ambrosia Software/a> and one of my all time favorites: Avara! Apparently I can run it under emulation. Still making games after 20 years!/p>p>I’m sure i’ve missed many, what are your favorites?/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## --> nav classnavigation pagination aria-labelPosts pagination> h2 classscreen-reader-text>Posts pagination/h2> div classnav-links>span aria-currentpage classpage-numbers current>1/span>a classpage-numbers hrefhttps://theconsultant.net/page/2/>2/a>span classpage-numbers dots>…/span>a classpage-numbers hrefhttps://theconsultant.net/page/20/>20/a>a classnext page-numbers hrefhttps://theconsultant.net/page/2/>Older posts i classfa fa-chevron-right>/i>/a>/div> /nav> /main>!-- #main --> /div>!-- #primary -->/div>!-- close .main-content-inner -->div idsecondary classwidget-area col-sm-12 col-md-4 rolecomplementary> div classwell> aside idsearch-2 classwidget widget_search>form rolesearch methodget classform-search actionhttps://theconsultant.net/> div classinput-group> label classscreen-reader-text fors>Search for:/label> input typetext classform-control search-query placeholderSearch… value names titleSearch for: /> span classinput-group-btn> button typesubmit classbtn btn-default namesubmit idsearchsubmit valueSearch>span classglyphicon glyphicon-search>/span>/button> /span> /div>/form>/aside> aside idrecent-posts-2 classwidget widget_recent_entries> h3 classwidget-title>Recent Posts/h3> ul> li> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/>Somedays I write more bugs than code…/a> /li> li> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/>Nibbling at Python/a> /li> li> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/>Using SMS URIs with OC Transpo/a> /li> li> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/>Fun with SED!/a> /li> li> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/>Intro to iOS: Thursday Dec. 6/a> /li> li> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/>Capture all tabs in Safari as URLs to the clipboard/a> /li> li> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/>Printing to PDF on iOS/a> /li> li> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/>Looking up Mac specs../a> /li> li> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/>Opening a pile of urls all at once — updated version!/a> /li> li> a hrefhttps://theconsultant.net/2015/12/all-about-games/>All about games../a> /li> /ul> /aside> /div>/div>!-- #secondary --> /div>!-- close .row --> /div>!-- close .container -->/div>!-- close .site-content --> div data-wpr-lazyrender1 idfooter-area> div classcontainer footer-inner> div classrow> /div> /div> footer idcolophon classsite-footer rolecontentinfo> div classsite-info container> div classrow> nav rolenavigation classcol-md-6> /nav> div classcopyright col-md-6> sparkling Theme by a hrefhttp://colorlib.com/ target_blank relnofollow noopener>Colorlib/a> Powered by a hrefhttp://wordpress.org/ target_blank>WordPress/a> /div> /div> /div>!-- .site-info --> div classscroll-to-top>i classfa fa-angle-up>/i>/div>!-- .scroll-to-top --> /footer>!-- #colophon --> /div>/div>!-- #page --> script>use strict;function wprRemoveCPCSS(){var preload_stylesheetsdocument.querySelectorAll(linkdata-rocket-asyncstylerelpreload);if(preload_stylesheets&&0preload_stylesheets.length)for(var stylesheet_index0;stylesheet_indexpreload_stylesheets.length;stylesheet_index++){var mediapreload_stylesheetsstylesheet_index.getAttribute(media)||all;if(window.matchMedia(media).matches)return void setTimeout(wprRemoveCPCSS,200)}var elemdocument.getElementById(rocket-critical-css);elem&&removein elem&&elem.remove()}window.addEventListener?window.addEventListener(load,wprRemoveCPCSS):window.attachEvent&&window.attachEvent(onload,wprRemoveCPCSS);/script>script srchttps://theconsultant.net/wp-content/cache/min/1/39d9818f2ef65e69fa8845bd7be9f98a.js data-minify1 data-rocket-defer defer>/script>noscript>link data-minify1 relstylesheet idwp-block-library-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/plugins/gutenberg/build/block-library/style.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-bootstrap-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-icons-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-style-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/style.css?ver1695290452 typetext/css mediaall />/noscript>/body>/html>!-- This website is like a Rocket, isnt it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1738957195 -->
Port 443
HTTP/1.1 200 OKDate: Fri, 07 Feb 2025 22:27:42 GMTServer: ApacheLast-Modified: Fri, 07 Feb 2025 19:49:28 GMTCache-Control: max-age0Expires: Fri, 07 Feb 2025 22:27:42 GMTVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !doctype html>!--if !IE>html classno-js non-ie langen-US> !endif-->!--if IE 7 >html classno-js ie7 langen-US> !endif-->!--if IE 8 >html classno-js ie8 langen-US> !endif-->!--if IE 9 >html classno-js ie9 langen-US> !endif-->!--if gt IE 9>!-->html classno-js langen-US> !--!endif-->head>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>meta nametheme-color content>link relprofile hrefhttp://gmpg.org/xfn/11>title>theconsultant.net – Simplicity is complicated./title>style idrocket-critical-css>.wp-block-media-text .wp-block-media-text__media{grid-area:media-text-media;margin:0}.wp-block-media-text .wp-block-media-text__content{grid-area:media-text-content;padding:0 8%;word-break:break-word}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,header,main,nav{display:block}a{background-color:transparent}h1{margin:.67em 0;font-size:2em}pre{overflow:auto}pre{font-family:monospace,monospace;font-size:1em}button,input{margin:0;font:inherit;color:inherit}button{overflow:visible}button{text-transform:none}button{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}@font-face{font-family:Glyphicons Halflings;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format(svg)}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-search:before{content:\e003}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}p{margin:0 0 10px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul{margin-top:0;margin-bottom:10px}pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-md-4,.col-md-8,.col-sm-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:768px){.col-sm-12{float:left}.col-sm-12{width:100%}}@media (min-width:992px){.col-md-4,.col-md-8{float:left}.col-md-8{width:66.66666667%}.col-md-4{width:33.33333333%}}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;border:1px solid transparent;border-radius:4px}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.collapse{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-btn:last-child>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:last-child>.btn{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse{border-color:#e7e7e7}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.container:after,.container:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{display:table;content: }.container:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}@-ms-viewport{width:device-width}.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-angle-up:before{content:\f106}.fa-calendar-alt:before{content:\f073}.fa-user:before{content:\f007}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-regular-400.svg#fontawesome) format(svg)}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.eot);src:url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.eot?#iefix) format(embedded-opentype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.woff2) format(woff2),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.woff) format(woff),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.ttf) format(truetype),url(https://theconsultant.net/wp-content/themes/sparkling/assets/fonts/fa-solid-900.svg#fontawesome) format(svg)}.fa{font-family:Font Awesome\ 5 Free}.fa{font-weight:900}body{color:#6B6B6B;background-color:#F2F2F2;word-wrap:break-word;font-family:Open Sans,sans-serif;line-height:1.7;font-size:14px}a{color:#DA4453;text-decoration:none}pre{width:100%;white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}h1,h2,h3{color:#DA4453;font-weight:700;font-family:Roboto Slab,serif}h1{font-size:28px}h2{font-size:24px}h3{font-size:20px}button,input{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}inputtypetext{color:#666;border:1px solid #E8E8E8;border-radius:3px}inputtypetext{padding:3px}.side-pull-left .main-content-inner{float:left}.screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important}.entry-content:before,.entry-content:after,.site-header:before,.site-header:after,.site-content:before,.site-content:after{content:;display:table}.entry-content:after,.site-header:after,.site-content:after{clear:both}.hentry{margin:0}.byline,.updated{display:none}.group-blog .byline{display:inline;margin-right:0}.entry-content{margin:1.5em 0 0}.main-content-area{margin-top:40px;margin-bottom:40px}.entry-meta a{font-size:13px;color:#6B6B6B}.entry-meta{margin-bottom:30px}.page-header{margin-top:0;border-bottom:0;padding-bottom:0}.entry-meta{font-size:14px;margin-right:3px}.entry-meta span{margin-right:10px}.entry-title{color:#444;font-size:28px;margin-bottom:30px}.entry-title a{color:#444}.blog-item-wrap{margin-bottom:50px}.post-inner-content{padding:45px 50px;background-color:#fff;border:1px solid #dadada;border-top:none}body.blog .post-inner-content{border-top:1px solid #dadada;}.entry-title{margin-top:0}.widget ul li{list-style:none;border-bottom:1px solid #F2F2F2;margin-bottom:10px;padding-bottom:10px}.widget ul{padding:0;line-height:18px;font-size:14px}#secondary .widget{margin-bottom:50px;color:#C1C0C0;overflow:hidden}#secondary .widget:last-child{margin-bottom:0px}.well{background-color:#fff;padding:30px;border:1px solid #DADADA;overflow:hidden;clear:both}#secondary .widget>h3{font-size:14px;text-transform:uppercase;margin-bottom:25px;margin-top:0;color:#636467}#secondary .widget a{color:#C1C0C0}@media (max-width:767px){#secondary{clear:both}}.btn-default{background-color:#DA4453;border-color:#DA4453}.btn.btn-default{color:#FFF;text-transform:uppercase}.input-group-btn:last-child>.btn{margin-left:0}button{background-color:#DA4453;border:none;text-transform:uppercase;-webkit-border-radius:4px;border-radius:4px;color:#fff;font-size:12px;padding:5px 12px}#logo .site-name{font-weight:bold;margin:0}.nav>li>a{text-transform:uppercase}.navbar.navbar-default{background-color:#363636;font-family:Open Sans,serif;margin-bottom:0;font-weight:500}.navbar-default .navbar-nav>li>a{color:#F5F7FA;line-height:40px;text-transform:uppercase;font-size:12px}.navbar>.container .navbar-brand{color:#DADADA;font-size:20px;margin:10px 0;font-family:Roboto Slab,serif}.navbar{border-radius:0}.navbar-default{border:none}.navbar-nav>li{padding:15px;color:#F5F7FA}.navbar-nav>li>a{padding:0;display:inline-block}.nav.navbar-nav{float:right}@media (max-width:767px){.nav.navbar-nav{float:none}.navbar>.container .navbar-brand{margin:0}.navbar-default .navbar-nav>li>a{line-height:20px;padding-top:10px;padding-bottom:10px}}@media (max-width:767px){.post-inner-content{padding:20px 25px}}.scroll-to-top{background:#363636;background:rgba(100,100,100,0.4);color:#FFF;bottom:4%;display:none;position:fixed;right:20px;z-index:999;font-size:16px;text-align:center;line-height:40px;width:40px;border-radius:4px}@media (max-width:992px){.side-pull-left .main-content-inner{float:none}}buttontypesubmit{display:none}buttontypesubmit{display:block}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}/style>link relpreload data-rocket-preload asstyle hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap />link relstylesheet hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap mediaprint onloadthis.mediaall />noscript>link relstylesheet hrefhttps://fonts.googleapis.com/css?familyOpen%20Sans%3A400italic%2C400%2C600%2C700%7CRoboto%20Slab%3A400%2C300%2C700&displayswap />/noscript>meta namerobots contentmax-image-preview:large /> style>img:is(sizesauto i, sizes^auto, i) { contain-intrinsic-size: 3000px 1500px }/style> link reldns-prefetch href//fonts.googleapis.com />link hrefhttps://fonts.gstatic.com crossorigin relpreconnect />link relalternate typeapplication/rss+xml titletheconsultant.net » Feed hrefhttps://theconsultant.net/feed/ />link relalternate typeapplication/rss+xml titletheconsultant.net » Comments Feed hrefhttps://theconsultant.net/comments/feed/ />style idwp-emoji-styles-inline-css typetext/css> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; }/style>link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/plugins/gutenberg/build/block-library/style.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />style idclassic-theme-styles-inline-css typetext/css>/*! This file is auto-generated */.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}/style>style idglobal-styles-inline-css typetext/css>:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}/style>link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />link data-minify1 relpreload hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/style.css?ver1695290452 data-rocket-asyncstyle asstyle onloadthis.onloadnull;this.relstylesheet onerrorthis.removeAttribute(data-rocket-async) typetext/css mediaall />script typetext/javascript srchttps://theconsultant.net/wp-includes/js/jquery/jquery.min.js?ver3.7.1 idjquery-core-js>/script>link relhttps://api.w.org/ hrefhttps://theconsultant.net/wp-json/ />link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://theconsultant.net/xmlrpc.php?rsd />style typetext/css>/style> style typetext/css> .navbar > .container .navbar-brand { color: #dadada; } /style> script>/*! loadCSS relpreload polyfill. c2017 Filament Group, Inc. MIT License */(function(w){use strict;if(!w.loadCSS){w.loadCSSfunction(){}}var rploadCSS.relpreload{};rp.support(function(){var ret;try{retw.document.createElement(link).relList.supports(preload)}catch(e){ret!1}return function(){return ret}})();rp.bindMediaTogglefunction(link){var finalMedialink.media||all;function enableStylesheet(){link.mediafinalMedia}if(link.addEventListener){link.addEventListener(load,enableStylesheet)}else if(link.attachEvent){link.attachEvent(onload,enableStylesheet)}setTimeout(function(){link.relstylesheet;link.mediaonly x});setTimeout(enableStylesheet,3000)};rp.polyfunction(){if(rp.support()){return}var linksw.document.getElementsByTagName(link);for(var i0;ilinks.length;i++){var linklinksi;if(link.relpreload&&link.getAttribute(as)style&&!link.getAttribute(data-loadcss)){link.setAttribute(data-loadcss,!0);rp.bindMediaToggle(link)}}};if(!rp.support()){rp.poly();var runw.setInterval(rp.poly,500);if(w.addEventListener){w.addEventListener(load,function(){rp.poly();w.clearInterval(run)})}else if(w.attachEvent){w.attachEvent(onload,function(){rp.poly();w.clearInterval(run)})}}if(typeof exports!undefined){exports.loadCSSloadCSS}else{w.loadCSSloadCSS}}(typeof global!undefined?global:this))/script>style idrocket-lazyrender-inline-css>data-wpr-lazyrender {content-visibility: auto;}/style>meta namegenerator contentWP Rocket 3.18.1.4 data-wpr-featureswpr_defer_js wpr_minify_concatenate_js wpr_async_css wpr_automatic_lazy_rendering wpr_minify_css wpr_desktop />/head>body classhome blog group-blog> a classsr-only sr-only-focusable href#content>Skip to main content/a>div idpage classhfeed site> header idmasthead classsite-header rolebanner> nav classnavbar navbar-default rolenavigation> div classcontainer> div classrow> div classsite-navigation-inner col-sm-12> div classnavbar-header> div idlogo> h1 classsite-name> a classnavbar-brand hrefhttps://theconsultant.net/ titletheconsultant.net relhome>theconsultant.net/a> /h1> /div>!-- end of #logo --> button typebutton classbtn navbar-toggle data-togglecollapse data-target.navbar-ex1-collapse> span classsr-only>Toggle navigation/span> span classicon-bar>/span> span classicon-bar>/span> span classicon-bar>/span> /button> /div> div classcollapse navbar-collapse navbar-ex1-collapse>ul idmenu-standard classnav navbar-nav>li idmenu-item-280 classmenu-item menu-item-type-post_type menu-item-object-page menu-item-280>a hrefhttps://theconsultant.net/about-dave/>About Dave/a>/li>/ul>/div> /div> /div> /div> /nav>!-- .site-navigation --> /header>!-- #masthead --> div idcontent classsite-content> div classtop-section> /div> div classcontainer main-content-area> div classrow side-pull-left> div classmain-content-inner col-sm-12 col-md-8> div idprimary classcontent-area> main idmain classsite-main rolemain> article idpost-605 classpost-605 post type-post status-publish format-standard hentry category-command-line category-python> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ titleSomedays I write more bugs than code… > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ relbookmark>Somedays I write more bugs than code…/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/ relbookmark>time classentry-date published datetime2019-09-17T15:55:30-04:00>September 17, 2019/time>time classupdated datetime2019-09-17T15:56:26-04:00>September 17, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>I posted recently that I had started on a hrefhttps://codechalleng.es/bites/>Bites of Py Exercises/a>, and i’m glad to say I have finished a few more. Small wins are good!/p>p>Along the way i’ve discovered, thanks again to the a hrefhttps://pythonbytes.fm/episodes/show/145/the-python-3-y2k-problem>Python Bytes podcast/a>, a new way to see crashes in my scripts. Currently I am working slowly towards scraping my favorite wallpapers from a hrefhttps://wallhaven.cc>wallhaven.cc/a> and downloading them. But, as I mention in the title, I seem to be better at writing bugs than functional code./p>p>When a script crashes in Python you get a traceback, which seems to be a backwards listing of the things that caused the crash. With practice I will get better at making sense of things like this:/p>pre classwp-block-preformatted>Traceback (most recent call last): File wff-selenium-no-login.py, line 6, in from urllib import Request ImportError: cannot import name Request from urllib NameError: name Request is not defined File wff-selenium-no-login.py, line 24, in req request(wallpaper, headers {User-Agent: Mozilla/5.0}) TypeError: module object is not callable/pre>p>But thanks to that a hrefhttps://pythonbytes.fm/episodes/show/145/the-python-3-y2k-problem>episode/a> I learned about a hrefhttps://aroberge.github.io/friendly-traceback-docs/docs/html/>friendly_traceback/a>, which gives me this output instead:/p>pre classwp-block-code>code>Python exception: TypeError: module object is not callableA TypeError is usually caused by trying to combine two incompatible types of objects, by calling a function with the wrong type of object,or by tring to do an operation not allowed on a given type of object.Execution stopped on line 24 of file wff-selenium-no-login.py.-->24: req request(wallpaper, headers {User-Agent: Mozilla/5.0})request: <module urllib.request from /Users/davidr/...>/code>/pre>p>How is this better? Well.. it explains the error, points to the line I need to fix.. and also tells me the module I have issue with. Though I still don’t know what to do to fix it it makes me feel like I have a better handle on it. /p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-599 classpost-599 post type-post status-publish format-standard hentry category-python tag-bites-of-python tag-python-3> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ titleNibbling at Python > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ relbookmark>Nibbling at Python/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/ relbookmark>time classentry-date published datetime2019-09-06T17:12:18-04:00>September 6, 2019/time>time classupdated datetime2019-09-06T17:12:21-04:00>September 6, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Learning a hrefhttps://www.python.org>Python/a> has been on my radar for many years. I have made a start at it a few times. The shell scripts, Applescript and even the Hypercard stacks I made back in the day are very useful but not quite enough any longer. Working with teams of software developers and tech support I have accumulated a lot of “em>what programming is and how it works” /em>over the years, so this is not all new./p>p>Recently I listened to another fine episode of a hrefhttps://talkpython.fm/episodes/show/140/level-up-your-python-with-100daysofcode-challenge>Talk Python to Me/a>, this time with Michael, Bob and Julian describing their latest course/adventure, a hrefhttps://training.talkpython.fm/courses/explore_100days_in_python/100-days-of-code-in-python>100 Days of Web./a> I like their style and the project intrigued me so I went and had a look and found a hrefhttps://codechalleng.es/bites/>Bites of Py Exercises/a>.. and decided to jump in. I promptly discovered I had setup an account a year ago. Did I mention i’ve tried getting into Python a few times?/p>p>I’ve managed to complete 3 out of the 4 Intro Bites.. and with that under my belt, here’s a few things that are making it easier as I go along: I bounce around Google a lot trying to figure things out. The a hrefhttps://www.python.org/doc/>pythonstrong> /strong>documentation/a> has lots of examples. a hrefhttps://stackoverflow.com/search?qpython+3>Stackoverflow/a> has answers for everything but can be hard to make heads or tails of. The team at a hrefhttps://realpython.com>RealPython/a> made some fantastic tutorials which definitely helped me understand dicts enough to finish that Bite. But the best has been the Pybites Slack forum. I got really really stuck I went and talked to those folks and they pointed me in the right direction. Thanks!/p>p>Working in the browser is nice, but i’m used to using an editor on my own Mac along with all the tools it brings. So I asked.. and apparently I need to learn a hrefhttps://www.gnu.org/software/emacs/>Emacs/a>. Just kidding. a hrefhttps://code.visualstudio.com>VS Code/a> and a hrefhttps://www.jetbrains.com/pycharm/>PyCharm/a> are both good, along with downloading the Bites and the tests, using git and a hrefhttps://github.com>Github/a> to store your code (and revisions!!!) from which you can then submit your answers. I was already familiar with these tools.. so I gave it a shot. They’re a great distraction from working on Bites. Fiddling with python versions, installing stuff, tweaking settings. Wheee! For now i’m going to stick to usingstrong> /strong>the a hrefhttps://docs.python.org/3/tutorial/interpreter.html>Python Interpreter on the command line/a> to try things out until it works, then code in a hrefhttps://www.barebones.com/products/bbedit/>BBEdit/a> and run the tests on the command line. Once they pass, I copy and paste the code into the web interface. It’s simple and does the job./p>p>As to the Bites themselves? Hey, i’ve done 3 successfully! The first was hard as I really had no idea what I was doing and how the interface worked. I’ve never used tests before. I have expectations of seeing stuff print on screen but it never happened. I was confused! Eventually I figure out how to get it to work.. The second one? Well, as i’ve told my kids, “em>Programming is constant failure with the occasional success./em>” That one I got so frustrated I gave up and read the solution. Yes, you can discuss your solution with others once you give up or solve it. The third one I got eventually.. and the 4th is similar to it but just enough of a difference to throw you off. I felt like I was slogging through each Bite./p>p>By now you’re wondering if I should abandon this as it’s not sounding like fun. Totally the opposite! I’ve learned a ton of new things, and i’ve got a better feel for how to get to the answer without all the distractions around it. Review the goal 4 or 5 times, make an outline of how I think it will work, look up a bunch of things, learn new things, poke around in IDLE until I can get a step to work, code it.. repeat! Eventually the tests pass. Woohoo! I really should be doing my job and instead I spent part of my morning having fun and learning Python. On to Bite 5!/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-588 classpost-588 post type-post status-publish format-standard hentry category-general tag-oc-transpo> div classblog-item-wrap> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ titleUsing SMS URIs with OC Transpo > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ relbookmark>Using SMS URIs with OC Transpo/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/ relbookmark>time classentry-date published datetime2019-03-18T18:43:47-04:00>March 18, 2019/time>time classupdated datetime2019-03-18T18:43:49-04:00>March 18, 2019/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Ottawa’s OC Transpo service provides a hrefhttp://www.octranspo.com/go_mobile/text_560-560>real-time bus schedules through text-messages on your cell phone/a>. Basically you text 560560 your stop number, like 7595, with the option to specify a bus, like the number 18. It will shortly reply with a GPS adjusted schedule. In some cases you will be asked to text back a 1 or 2 for specifying the direction, when you are at a transitway stop or loop that services both directions./p>p>There’s a a hrefhttp://www.octranspo.com/mobile/iphone>mobile app for iOS/a>, but I like the simplicity of sending a text without needing to fiddle with an app…/p>p>At some point I ran across an article explaining how to embed an SMS link into a web page (such as a hrefhttps://weblog.west-wind.com/posts/2013/Oct/09/Prefilling-an-SMS-on-Mobile-Devices-with-the-sms-Uri-Scheme>this one/a>) and decided I needed to try it out./p>p>A live example:/p>a hrefsms:560-560&body7040%2019%202>SMS:560-560&body7040%2020%202/a>p>The components:/p>pre classwp-block-preformatted>SMS: defines this as an sms linkbr>560-560 or 560560 is the OCTranspo number to text tobr>&body the contents of the text messagebr>7040 the stop we want data onbr>%20 html code for a spacebr>20 is our bus numberbr>%20 another spacebr>2 as we want to go towards St. Laurent.br>/pre>p>A bunch of these urls got set up and stored in Apple Notes for all the most common stops I use. /p>p>Once you tap one it will load up a new message with the contents defined, touch the send key and wait a few seconds. Here’s the result I got back in this case:/p>pre classwp-block-preformatted>Stop 7040 route 20 St-Laurent at 18:46 to St-Laurent; 19:14 to St-Laurent; 19:44 to St-Laurent./pre>p>Now if only I could figure out how to send it automatically i’d save a whole tap!/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-582 classpost-582 post type-post status-publish format-standard hentry category-command-line tag-sed tag-unix> div classblog-item-wrap> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ titleFun with SED! > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ relbookmark>Fun with SED!/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/ relbookmark>time classentry-date published datetime2018-12-26T10:39:46-05:00>December 26, 2018/time>time classupdated datetime2018-12-26T10:39:46-05:00>December 26, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>(Found this sitting in my blog’s drafts folder.. only 11 years old but all of it still just as valid today!)/p>p>A couple of shell scripts for renaming files on the command line./p>pre># Replaces JPG in any file with jpg for ii in * ; do ARG1`echo $ii | sed s/JPG/jpg/g` ; mv $ii $ARG1 ; done/pre>p>Stany’s renaming scripts:/p>pre>#!/bin/bash# Mass REname of english filenames# relies on fixfilename regexp enginePATH$PATH:/Users/stany/binechofor ii in * ; do ARG1`echo $ii | fixfilename ` ; echo -n . ; mv $ii $ARG1 ; doneecho/pre>pre>#!/bin/bash# the fixfilename regexp enginePATH$PATH:/raid0/toolssed s@(@@g;s@)@@g;s/ /_/g;s/\,//g;s/\&/and/g;s/_-_/-/g;s/-_/-/g;s/\!//g;s/\;//g;s/\//g;s/\//g;s/%20/_/g /pre>p>A combined version…/p>pre>#!/bin/bashfor ii in * ; do ARG1`echo $ii | sed s@(@@g | sed s@)@@g | sed s/ /_/g | sed s/\,//g | sed s/\&/and/g | sed s/_-_/-/g | sed s/-_/-/g | sed s/\!//g | sed s/\;//g | sed s/\//g | sed s/\//g | sed s/%20/_/g ` ; echo -n . ; mv $ii $ARG1 ; doneecho/pre>p>This script will remove the first 4 characters of a filename:/p>pre>for ii in * ; do FOO`echo $ii | sed s/^....//g`; echo mv \$ii\ \$FOO\ ; done/pre>p>This will echo what it actually does, and place quotes in front and after each filename. In the code>for ii in */code> bit you can adjust the regex to match the files you need. So code>for ii in *.txt/code> will match all the files ending in .txt/p>p>Remove the echo to run it, or pipe into shell: | sh/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-575 classpost-575 post type-post status-publish format-standard hentry category-uncategorized> div classblog-item-wrap> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ titleIntro to iOS: Thursday Dec. 6 > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ relbookmark>Intro to iOS: Thursday Dec. 6/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/ relbookmark>time classentry-date published datetime2018-12-02T21:09:56-05:00>December 2, 2018/time>time classupdated datetime2018-12-02T21:09:58-05:00>December 2, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Tom and I are doing another Intro class this Thursday, Dec. 6th, at 6:30 to 8:30 p.m. at the Main Library Branch./p>p>The class is free but registration is a hrefhttps://biblioottawalibrary.ca/en/event/introduction-ios-0>required/a>.br>/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>p>Join us for an introduction iOS, the operating system that runs iPhones and iPads, with Dave and Tom, founders of the Bytown Mac User Group. ByMUG has been helping Ottawans using Mac and iOS devices since 2006. Bring your device and follow along. No device? No problem! This informative workshop will cover the basics and much more! /p>/blockquote>p>If you are attending and have questions.. please send them in in advance so we can be prepared./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-475 classpost-475 post type-post status-publish format-standard hentry category-applescript tag-applescript> div classblog-item-wrap> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ titleCapture all tabs in Safari as URLs to the clipboard > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ relbookmark>Capture all tabs in Safari as URLs to the clipboard/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/ relbookmark>time classentry-date published datetime2017-06-05T16:51:52-04:00>June 5, 2017/time>time classupdated datetime2018-12-26T10:32:51-05:00>December 26, 2018/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Sometimes you’re doing research and have a pile of tabs (and windows) open and need to get them into a document to share with coworkers… so I went digging and tweaking and found an Applescript that does the job:/p>div>div>span stylefont-family: Verdana-Bold; color: #000000;>tell/span> span stylefont-family: Verdana-Italic; color: #0000ff;>application/span>span stylefont-family: Verdana; color: #000000;> “Safari”/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>docText/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span>span stylefont-family: Verdana; color: #000000;> “”/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>windowCount/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana-Bold; color: #0000ff;>count/span>span stylefont-family: Verdana; color: #000000;> (/span>span stylefont-family: Verdana-Bold; color: #000000;>every/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana-Bold; color: #000000;>where/span> span stylefont-family: Verdana; color: #6c05d3;>visible/span> span stylefont-family: Verdana-Bold; color: #000000;>is/span> span stylefont-family: Verdana-Italic; color: #6c05d3;>true/span>span stylefont-family: Verdana; color: #000000;>)/span>/div>div styletext-indent: 4ex;>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>repeat/span> span stylefont-family: Verdana-Bold; color: #000000;>with/span> span stylefont-family: Verdana; color: #407f00;>x/span> span stylefont-family: Verdana-Bold; color: #000000;>from/span>span stylefont-family: Verdana; color: #000000;> 1 /span>span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>windowCount/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabCount/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana-Italic; color: #0000ff;>number/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tabs/span> span stylefont-family: Verdana-Bold; color: #000000;>in/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>repeat/span> span stylefont-family: Verdana-Bold; color: #000000;>with/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>from/span>span stylefont-family: Verdana; color: #000000;> 1 /span>span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>tabCount/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabName/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #6c05d3;>name/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tab/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>tabURL/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #6c05d3;>URL/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>tab/span> span stylefont-family: Verdana; color: #407f00;>y/span> span stylefont-family: Verdana-Bold; color: #000000;>of/span> span stylefont-family: Verdana-Italic; color: #0000ff;>window/span> span stylefont-family: Verdana; color: #407f00;>x/span> span stylefont-family: Verdana-Bold; color: #000000;>as/span> span stylefont-family: Verdana-Italic; color: #0000ff;>string/span>/div>div styletext-indent: 12ex;>span stylefont-family: Verdana-Bold; color: #000000;>set/span> span stylefont-family: Verdana; color: #407f00;>docText/span> span stylefont-family: Verdana-Bold; color: #000000;>to/span> span stylefont-family: Verdana; color: #407f00;>docText/span>span stylefont-family: Verdana; color: #000000;> & /span>span stylefont-family: Verdana; color: #407f00;>tabName/span>span stylefont-family: Verdana; color: #000000;> & ” – ” & /span>span stylefont-family: Verdana; color: #407f00;>tabURL/span>span stylefont-family: Verdana; color: #000000;> & /span>span stylefont-family: Verdana; color: #6c05d3;>linefeed/span> span stylefont-family: Verdana-Bold; color: #000000;>as/span> span stylefont-family: Verdana-Italic; color: #0000ff;>string/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>repeat/span>/div>div styletext-indent: 8ex;>span stylefont-family: Verdana-Bold; color: #0016a0;>set the clipboard to/span> span stylefont-family: Verdana-Bold; color: #000000;>the/span> span stylefont-family: Verdana; color: #407f00;>docText/span>/div>div styletext-indent: 4ex;>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>repeat/span>/div>div>span stylefont-family: Verdana-Bold; color: #000000;>end/span> span stylefont-family: Verdana-Bold; color: #000000;>tell/span>/div>/div>p>You can save it as a standalone script and run it from there, or stick into a script item in Automator and run it as a service.. or even call it from the command line as an Osascript./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-468 classpost-468 post type-post status-publish format-standard hentry category-ios> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ titlePrinting to PDF on iOS > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ relbookmark>Printing to PDF on iOS/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/ relbookmark>time classentry-date published datetime2016-10-18T10:53:48-04:00>October 18, 2016/time>time classupdated datetime2016-10-18T10:54:43-04:00>October 18, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>It turns out to be super easy to print anything to a PDF on an iOS device!/p>blockquote>p>In the Share sheet from any app choose Print. The print preview dialog appears. Now instead of printing “pinch” on the print preview like just as if you’d want to enlarge it. It opens — now as a PDF — in a separate dialog./p>/blockquote>p>From a a hrefhttp://blog.devontechnologies.com/2016/09/print-to-pdf-on-ios/>post on DEVONthink’s blog, the Devonian Times/a>./p>p> /p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-444 classpost-444 post type-post status-publish format-standard hentry category-applescript category-command-line category-macintosh category-tech-support> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ titleLooking up Mac specs.. > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ relbookmark>Looking up Mac specs../a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/ relbookmark>time classentry-date published datetime2016-10-01T14:23:56-04:00>October 1, 2016/time>time classupdated datetime2016-10-01T14:37:08-04:00>October 1, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>Did I mention I love a hrefhttps://smilesoftware.com/textexpander>TextExpander/a>? Yeah.. so, to make a long story short: clients ask me questions about their computers, upgrades, lifespans, etc. I don’t normally remember all the details of their Macs so I get them to send me the Serial Number (Open the Apple menu, click About This Mac and it should be right there.)/p>p>Once you have it you can go by Apple’s support site and look it up… but that takes too long./p>p>Make a new TextExpander snippet with Applescript as the content type:code>br />property theURL : br />set theURL to http://support.apple.com/specs/# & (the clipboard)br />do shell script open & theURLbr />/code>/p>p>Then you just copy the serial number, and anywhere you can type use code>!specs/code> to invoke it and up pops open Apple spec page a few seconds later./p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-430 classpost-430 post type-post status-publish format-standard hentry category-command-line category-mac-os-x category-python> div classblog-item-wrap> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ titleOpening a pile of urls all at once — updated version! > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ relbookmark>Opening a pile of urls all at once — updated version!/a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/ relbookmark>time classentry-date published datetime2016-05-11T15:17:40-04:00>May 11, 2016/time>time classupdated datetime2016-05-11T15:20:05-04:00>May 11, 2016/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>A a hrefhttp://www.theconsultant.net/2015/08/open-a-pile-of-links-in-browser-tabs-all-at-once/>year or so ago/a> I wrote a post on how to use xargs to open a bunch of urls that were in your clipboard. But it turns out that in newer versions of OS X something broke, deliberately or otherwise, and that method no longer works. Well, it works fine, it’s just *too* fast. So today I needed to check about a hundred urls.. and so it was time to fix that script. I’ve been slowly working on learning Python, so I decided to use that.. and this is what I ended up with:br />code>br />#! /usr/bin/pythonbr />import webbrowserbr />import pyperclipbr />import timebr />url_list pyperclip.paste()br />clean_list url_list.splitlines(False)br />for x in clean_list:/code>br /> code>webbrowser.open(x)/code>br /> code>time.sleep(.5)/code>/p>p>It only took me about an hour 😉/p>p>What does it do? It grabs the clipboard, splits each line inside the clipboard at the return character, and then there is a loop which tells the browser to open the url .. wait a half second and then do it again./p>p>I’d like to figure out how to grab the clipboard and clean it in one line.. but that’s for another day!/p>p>Back to work../p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## -->article idpost-416 classpost-416 post type-post status-publish format-standard hentry category-uncategorized> div classblog-item-wrap> a hrefhttps://theconsultant.net/2015/12/all-about-games/ titleAll about games.. > /a> div classpost-inner-content> header classentry-header page-header> h2 classentry-title>a hrefhttps://theconsultant.net/2015/12/all-about-games/ relbookmark>All about games../a>/h2> div classentry-meta> span classposted-on>i classfa fa-calendar-alt>/i> a hrefhttps://theconsultant.net/2015/12/all-about-games/ relbookmark>time classentry-date published datetime2015-12-02T18:12:31-05:00>December 2, 2015/time>time classupdated datetime2015-12-02T18:12:31-05:00>December 2, 2015/time>/a>/span>span classbyline> i classfa fa-user>/i> span classauthor vcard>a classurl fn n hrefhttps://theconsultant.net/author/dave/>David Rostenne/a>/span>/span> /div>!-- .entry-meta --> /header>!-- .entry-header --> div classentry-content> p>There are a few places to get Mac games, other than the App Store./p>p>A few of the larger ones:/p>p>a hrefhttp://store.steampowered.com/search/?term&sort_by_ASC&osmac&page1#sort_by_ASC&category1998&osmac&page1>Steam/a> lists 2500 games for Mac.br />a hrefhttps://www.gog.com/games##sortbestselling&systemosx_107&page1>GOG or Good Old Games/a> has 1297 games for Mac.br />a hrefhttp://www.macgamestore.com/listing/New-Releases/?viewastile>macgamestore.com/a>, has hundreds in each category./p>p>There are quite a few others, and reviews of them are available online if you want to know which is better or worse than another, and why./p>p>a hrefhttp://www.gamersgate.com/mac>gamersgate.com/a>br />a hrefhttp://www.gamesrocket.com/PC-Mac/Mac-Games/sort-by-date>gamesrocket.com/a>br />a hrefhttp://www.amazon.com/mac-game-downloads/b?node2899771011>amazon.com/mac-game-downloads/a>br />a hrefhttps://www.gameagent.com>gameagent.com/a>br />a hrefhttp://www.aspyr.com/search?utf8✓&search_term&platform%5B%5DMac&view_optionGrid_View>aspyr.com/a>br />a hrefhttps://www.ubisoft.com/en-CA/game/assassins-creed-syndicate/>ubisoft.com/a>br />a hrefhttp://www.ea.com/uk/mac>ea.com/a>/p>p>The reason we’re here is for games.. and knowing what’s good *before spending money* is important, go read reviews. There are many review sites, and they all have “best of” lists./p>p>http://www.macgamerhq.com/top-games-for-mac//p>p>What do I play?br />More like what do I still play? aka what still works on El Capitan./p>p>a hrefhttps://itunes.apple.com/gb/app/osmos/id408054320?mt12>Osmos/a>br />a hrefhttps://itunes.apple.com/ca/app/enigmo-2/id403388159?mt12>Enigmo/a>/p>p>Quinn, a Tetris game, which you can still download from a hrefhttp://macintoshgarden.org/games/quinn>macintoshgarden.org/a>/p>p>a hrefhttps://itunes.apple.com/ca/app/the-tiny-bang-story/id456287106?mt12>The Tiny Bang Story/a>, a kids puzzle game./p>p>Cave Story “Doukutsu Monogatari” is a great side scroller ported to the Mac. A bit of fiddling required to get it to work, but worth it! Start here: a hrefhttp://www.cavestory.org/download/cave-story.php>http://www.cavestory.org/download/cave-story.php/a>/p>p>Bungie. What else do I need to say? Yep. Halo. Myth, and many more. Halo 5 just came out.. for Xbox. Although Microsoft did port 2 games to iOS (instead of Windows Phone, what a surprise!) : Halo Spartan Assault and Halo Spartan Strike./p>p>Yes, You can still play Halo, from 2004, using a hrefhttp://halomd.net>http://halomd.net/a>br />You can stil play Myth as well, using a hrefhttp://projectmagma.net/what/>Project Magma/a>./p>p>But we’re not limited to just Mac games.. we can run emulators as well. One that I have used on occasion is a hrefhttp://boxerapp.com/games>Boxer/a>, which lets you run DOS games./p>p>Shout out to a hrefhttp://www.ambrosiasw.com>Ambrosia Software/a> and one of my all time favorites: Avara! Apparently I can run it under emulation. Still making games after 20 years!/p>p>I’m sure i’ve missed many, what are your favorites?/p> /div>!-- .entry-content --> /div> /div>/article>!-- #post-## --> nav classnavigation pagination aria-labelPosts pagination> h2 classscreen-reader-text>Posts pagination/h2> div classnav-links>span aria-currentpage classpage-numbers current>1/span>a classpage-numbers hrefhttps://theconsultant.net/page/2/>2/a>span classpage-numbers dots>…/span>a classpage-numbers hrefhttps://theconsultant.net/page/20/>20/a>a classnext page-numbers hrefhttps://theconsultant.net/page/2/>Older posts i classfa fa-chevron-right>/i>/a>/div> /nav> /main>!-- #main --> /div>!-- #primary -->/div>!-- close .main-content-inner -->div idsecondary classwidget-area col-sm-12 col-md-4 rolecomplementary> div classwell> aside idsearch-2 classwidget widget_search>form rolesearch methodget classform-search actionhttps://theconsultant.net/> div classinput-group> label classscreen-reader-text fors>Search for:/label> input typetext classform-control search-query placeholderSearch… value names titleSearch for: /> span classinput-group-btn> button typesubmit classbtn btn-default namesubmit idsearchsubmit valueSearch>span classglyphicon glyphicon-search>/span>/button> /span> /div>/form>/aside> aside idrecent-posts-2 classwidget widget_recent_entries> h3 classwidget-title>Recent Posts/h3> ul> li> a hrefhttps://theconsultant.net/2019/09/somedays-i-write-more-bugs-than-code/>Somedays I write more bugs than code…/a> /li> li> a hrefhttps://theconsultant.net/2019/09/nibbling-at-python/>Nibbling at Python/a> /li> li> a hrefhttps://theconsultant.net/2019/03/using-sms-uris-with-oc-transpo/>Using SMS URIs with OC Transpo/a> /li> li> a hrefhttps://theconsultant.net/2018/12/fun-with-sed/>Fun with SED!/a> /li> li> a hrefhttps://theconsultant.net/2018/12/intro-to-ios-thursday-dec-6/>Intro to iOS: Thursday Dec. 6/a> /li> li> a hrefhttps://theconsultant.net/2017/06/capture-all-tabs-in-safari-as-urls-to-the-clipboard/>Capture all tabs in Safari as URLs to the clipboard/a> /li> li> a hrefhttps://theconsultant.net/2016/10/printing-to-pdf-on-ios/>Printing to PDF on iOS/a> /li> li> a hrefhttps://theconsultant.net/2016/10/looking-up-mac-specs/>Looking up Mac specs../a> /li> li> a hrefhttps://theconsultant.net/2016/05/opening-a-pile-of-urls-all-at-once-updated-version/>Opening a pile of urls all at once — updated version!/a> /li> li> a hrefhttps://theconsultant.net/2015/12/all-about-games/>All about games../a> /li> /ul> /aside> /div>/div>!-- #secondary --> /div>!-- close .row --> /div>!-- close .container -->/div>!-- close .site-content --> div data-wpr-lazyrender1 idfooter-area> div classcontainer footer-inner> div classrow> /div> /div> footer idcolophon classsite-footer rolecontentinfo> div classsite-info container> div classrow> nav rolenavigation classcol-md-6> /nav> div classcopyright col-md-6> sparkling Theme by a hrefhttp://colorlib.com/ target_blank relnofollow noopener>Colorlib/a> Powered by a hrefhttp://wordpress.org/ target_blank>WordPress/a> /div> /div> /div>!-- .site-info --> div classscroll-to-top>i classfa fa-angle-up>/i>/div>!-- .scroll-to-top --> /footer>!-- #colophon --> /div>/div>!-- #page --> script>use strict;function wprRemoveCPCSS(){var preload_stylesheetsdocument.querySelectorAll(linkdata-rocket-asyncstylerelpreload);if(preload_stylesheets&&0preload_stylesheets.length)for(var stylesheet_index0;stylesheet_indexpreload_stylesheets.length;stylesheet_index++){var mediapreload_stylesheetsstylesheet_index.getAttribute(media)||all;if(window.matchMedia(media).matches)return void setTimeout(wprRemoveCPCSS,200)}var elemdocument.getElementById(rocket-critical-css);elem&&removein elem&&elem.remove()}window.addEventListener?window.addEventListener(load,wprRemoveCPCSS):window.attachEvent&&window.attachEvent(onload,wprRemoveCPCSS);/script>script srchttps://theconsultant.net/wp-content/cache/min/1/39d9818f2ef65e69fa8845bd7be9f98a.js data-minify1 data-rocket-defer defer>/script>noscript>link data-minify1 relstylesheet idwp-block-library-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/plugins/gutenberg/build/block-library/style.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-bootstrap-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-icons-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver1695290452 typetext/css mediaall />link data-minify1 relstylesheet idsparkling-style-css hrefhttps://theconsultant.net/wp-content/cache/min/1/wp-content/themes/sparkling/style.css?ver1695290452 typetext/css mediaall />/noscript>/body>/html>!-- This website is like a Rocket, isnt it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1738957768 -->
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]