├── themes └── griffin │ ├── layout │ └── partials │ │ ├── footer.hbs │ │ ├── styles.hbs │ │ └── scripts.hbs │ ├── source │ ├── plugins │ │ ├── rs-plugin-5 │ │ │ ├── index.php │ │ │ ├── css │ │ │ │ ├── index.php │ │ │ │ ├── openhand.cur │ │ │ │ ├── closedhand.cur │ │ │ │ └── navigation-skins │ │ │ │ │ ├── custom.css │ │ │ │ │ ├── persephone.css │ │ │ │ │ ├── hephaistos.css │ │ │ │ │ └── uranus.css │ │ │ ├── fonts │ │ │ │ ├── index.php │ │ │ │ ├── revicons │ │ │ │ │ ├── index.php │ │ │ │ │ ├── revicons.eot │ │ │ │ │ ├── revicons.ttf │ │ │ │ │ └── revicons.woff │ │ │ │ ├── font-awesome │ │ │ │ │ ├── index.php │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ └── pe-icon-7-stroke │ │ │ │ │ ├── css │ │ │ │ │ └── index.php │ │ │ │ │ ├── index.php │ │ │ │ │ └── fonts │ │ │ │ │ ├── index.php │ │ │ │ │ ├── Pe-icon-7-stroke.eot │ │ │ │ │ ├── Pe-icon-7-stroke.ttf │ │ │ │ │ └── Pe-icon-7-stroke.woff │ │ │ ├── js │ │ │ │ ├── index.php │ │ │ │ ├── source │ │ │ │ │ ├── index.php │ │ │ │ │ └── jquery.themepunch.enablelog.js │ │ │ │ ├── extensions │ │ │ │ │ ├── index.php │ │ │ │ │ └── source │ │ │ │ │ │ └── index.php │ │ │ │ └── jquery.themepunch.enablelog.js │ │ │ ├── assets │ │ │ │ ├── svg │ │ │ │ │ ├── index.php │ │ │ │ │ └── svg.zip │ │ │ │ ├── loader.gif │ │ │ │ ├── coloredbg.png │ │ │ │ ├── gridtile.png │ │ │ │ ├── sources │ │ │ │ │ ├── fb.png │ │ │ │ │ ├── fr.png │ │ │ │ │ ├── ig.png │ │ │ │ │ ├── tw.png │ │ │ │ │ ├── vm.png │ │ │ │ │ ├── wc.png │ │ │ │ │ ├── yt.png │ │ │ │ │ ├── post.png │ │ │ │ │ ├── revolution_slide1.png │ │ │ │ │ └── revolution_slide2.png │ │ │ │ ├── gridtile_3x3.png │ │ │ │ ├── gridtile_white.png │ │ │ │ └── gridtile_3x3_white.png │ │ │ ├── info.cfg │ │ │ └── php │ │ │ │ ├── instagram │ │ │ │ └── class-instagram.php │ │ │ │ ├── vimeo │ │ │ │ └── class-vimeo.php │ │ │ │ ├── twitter │ │ │ │ ├── connection │ │ │ │ │ └── Application.php │ │ │ │ └── RestApi.php │ │ │ │ └── youtube │ │ │ │ └── class-youtube.php │ │ ├── morphext │ │ │ ├── morphext.css │ │ │ ├── morphext.min.js │ │ │ └── morphext.js │ │ ├── jquery.countdown │ │ │ ├── img │ │ │ │ ├── countdownLED.png │ │ │ │ └── countdownGlowing.gif │ │ │ ├── js │ │ │ │ ├── jquery.countdown-cy.js │ │ │ │ ├── jquery.countdown-ja.js │ │ │ │ ├── jquery.countdown-nb.js │ │ │ │ ├── jquery.countdown-ko.js │ │ │ │ ├── jquery.countdown-he.js │ │ │ │ ├── jquery.countdown-uz.js │ │ │ │ ├── jquery.countdown-da.js │ │ │ │ ├── jquery.countdown-de.js │ │ │ │ ├── jquery.countdown-hu.js │ │ │ │ ├── jquery.countdown-id.js │ │ │ │ ├── jquery.countdown-el.js │ │ │ │ ├── jquery.countdown-ro.js │ │ │ │ ├── jquery.countdown-sv.js │ │ │ │ ├── jquery.countdown-tr.js │ │ │ │ ├── jquery.countdown-vi.js │ │ │ │ ├── jquery.countdown-zh-CN.js │ │ │ │ ├── jquery.countdown-zh-TW.js │ │ │ │ ├── jquery.countdown-hy.js │ │ │ │ ├── jquery.countdown-kn.js │ │ │ │ ├── jquery.countdown-ms.js │ │ │ │ ├── jquery.countdown-sq.js │ │ │ │ ├── jquery.countdown-th.js │ │ │ │ ├── jquery.countdown-ca.js │ │ │ │ ├── jquery.countdown-ar.js │ │ │ │ ├── jquery.countdown-gl.js │ │ │ │ ├── jquery.countdown-gu.js │ │ │ │ ├── jquery.countdown-my.js │ │ │ │ ├── jquery.countdown-nl.js │ │ │ │ ├── jquery.countdown-lt.js │ │ │ │ ├── jquery.countdown-ur.js │ │ │ │ ├── jquery.countdown-es.js │ │ │ │ ├── jquery.countdown-fo.js │ │ │ │ ├── jquery.countdown-is.js │ │ │ │ ├── jquery.countdown-et.js │ │ │ │ ├── jquery.countdown-it.js │ │ │ │ ├── jquery.countdown-bg.js │ │ │ │ ├── jquery.countdown-fa.js │ │ │ │ ├── jquery.countdown-bn.js │ │ │ │ ├── jquery.countdown-fi.js │ │ │ │ ├── jquery.countdown-mk.js │ │ │ │ ├── jquery.countdown-lv.js │ │ │ │ ├── jquery.countdown-fr.js │ │ │ │ ├── jquery.countdown-pt-BR.js │ │ │ │ ├── jquery.countdown-cs.js │ │ │ │ ├── jquery.countdown-sk.js │ │ │ │ ├── jquery.countdown-sr.js │ │ │ │ ├── jquery.countdown-sr-SR.js │ │ │ │ ├── jquery.countdown-ml.js │ │ │ │ ├── jquery.countdown-bs.js │ │ │ │ ├── jquery.countdown-uk.js │ │ │ │ ├── jquery.countdown-pl.js │ │ │ │ ├── jquery.countdown-ru.js │ │ │ │ ├── jquery.countdown-sl.js │ │ │ │ └── jquery.countdown-hr.js │ │ │ ├── css │ │ │ │ └── jquery.countdown.css │ │ │ └── index.html │ │ ├── owlcarousel2 │ │ │ ├── assets │ │ │ │ ├── ajax-loader.gif │ │ │ │ ├── owl.video.play.png │ │ │ │ ├── owl.theme.default.min.css │ │ │ │ ├── owl.theme.green.min.css │ │ │ │ ├── owl.theme.green.css │ │ │ │ └── owl.theme.default.css │ │ │ └── LICENSE │ │ ├── pace │ │ │ └── LICENSE.txt │ │ ├── charts │ │ │ └── LICENSE.md │ │ └── jquery.parallax-1.1.3.js │ ├── robots.txt │ ├── css │ │ ├── mixins.css │ │ ├── print-invoice.css │ │ └── custom.css │ ├── images │ │ ├── 2fd.png │ │ ├── kev3d.PNG │ │ ├── kevin.jpg │ │ ├── 2fd-min.png │ │ ├── kev3d-min.PNG │ │ ├── kevin-min.jpg │ │ ├── kevgriffin.png │ │ ├── revolutionconf.png │ │ └── revolutionconf-min.png │ ├── fonts │ │ ├── fontello │ │ │ ├── font │ │ │ │ ├── fontello.eot │ │ │ │ ├── fontello.ttf │ │ │ │ └── fontello.woff │ │ │ ├── LICENSE.txt │ │ │ └── css │ │ │ │ └── animation.css │ │ └── font-awesome │ │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── less │ │ │ ├── screen-reader.less │ │ │ ├── fixed-width.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── core.less │ │ │ ├── stacked.less │ │ │ ├── font-awesome.less │ │ │ ├── bordered-pulled.less │ │ │ ├── rotated-flipped.less │ │ │ ├── path.less │ │ │ ├── animated.less │ │ │ └── mixins.less │ │ │ ├── scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _core.scss │ │ │ ├── font-awesome.scss │ │ │ ├── _stacked.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _path.scss │ │ │ ├── _animated.scss │ │ │ └── _mixins.scss │ │ │ └── HELP-US-OUT.txt │ ├── bootstrap │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ │ └── npm.js │ ├── js │ │ ├── coming.soon.config.js │ │ ├── google.map.config.js │ │ └── custom.js │ └── web.config │ ├── _config.yml │ └── helper │ └── index.js ├── scaffolds ├── draft.md ├── page.md └── post.md ├── source ├── articles │ └── index.md ├── thanks-signup-confirmed │ └── index.md ├── _posts │ ├── fix-my-computer.md │ ├── ASPNET-40-To-ASPNET-Core.md │ ├── One-Simple-Rule-for-Successful-Consulting.md │ ├── Enhancing-Your-Applications-For-Windows-7.md │ ├── Enable-SignalR-Logging-with-One-Simple-Line.md │ ├── Interview-with-Michael-Rollins-for-HRDevFest-2016.md │ ├── Simple-HTML-Formatting-in-Sublime-Text.md │ ├── Wildcard-search-with-LINQ.md │ ├── Learn-about-Windows-7-Task-Dialogs.md │ ├── Powershell-How-to-recursively-delete-files-based-of-file-extension.md │ ├── 50-Ways-to-Avoid-Find-and-Fix-ASP-NET-Performance-Issues.md │ ├── Specifying-Visual-Studio-Version-in-NPM-Installs.md │ ├── If-You-Reach-Just-One-Person.md │ ├── Exploring-C-7-0-Out-Variables.md │ ├── How-to-run-Visual-Studio-Code-from-Zsh-on-Mac-OSX.md │ ├── Quick-Introduction-to-SignalR-Streaming.md │ ├── How-to-run-Visual-Studio-Code-from-Terminal-on-Mac-OSX.md │ ├── My-Defacto-gitignore-file.md │ ├── Named-Callbacks-in-JavaScript.md │ ├── swift-kick-show-unbelievable-and-complex-advancements-in-machine-learning-with-ankur-kalra.md │ ├── Online-vs-Retail-Stores.md │ ├── No-matter-what-you-do-add-value.md │ ├── MongoDB-Setting-TTL-on-Documents.md │ ├── Preloading-Multiple-Audio-Tags-in-Internet-Explorer-9.md │ ├── Review-7-Recurring-Revenue-Recipes-for-Freelancers.md │ ├── Console-Games-Why-do-we-have-to-press-start.md │ ├── Moving-on-to-Greener-Pastures.md │ ├── Managing-Your-User-Group-Calendar-Roulette.md │ ├── The-10-Rule-to-Presentations.md │ ├── Managing-Your-User-Group-Food.md │ ├── swift-kick-show-nosql-shouldnt-mean-nosecurity-with-matt-groves.md │ ├── Running-a-Conference-Like-A-Startup.md │ ├── A-Diet-Programmers-Can-Relate-To.md │ ├── My-Attempt-at-LINQ-Pagination.md │ ├── Leaving-It-Better-Than-You-Found-It.md │ ├── Building-better-ConnectionStrings-with-ConnectionStringBuilder.md │ ├── Banks-ATMS-and-Horrible-User-Experiences.md │ └── Speaker-Gifts.md ├── thanks-signup │ └── index.md ├── speaking │ └── index.md ├── hire │ └── index.md ├── talks │ └── application-insights │ │ └── index.md └── newsletter │ └── index.md ├── Dockerfile ├── .vscode └── settings.json ├── package.json ├── .gitignore └── _config.yml /themes/griffin/layout/partials/footer.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/svg/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/source/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: -------------------------------------------------------------------------------- /scaffolds/draft.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | tags: 4 | --- 5 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/extensions/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/extensions/source/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scaffolds/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | --- 5 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/css/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/css/mixins.css: -------------------------------------------------------------------------------- 1 | 2 | /*# sourceMappingURL=mixins.css.map */ -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/info.cfg: -------------------------------------------------------------------------------- 1 | { 2 | "version":"5.3.1.6" 3 | } -------------------------------------------------------------------------------- /scaffolds/post.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | tags: 5 | --- 6 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/jquery.themepunch.enablelog.js: -------------------------------------------------------------------------------- 1 | window.tplogs = true; -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/js/source/jquery.themepunch.enablelog.js: -------------------------------------------------------------------------------- 1 | window.tplogs = true; -------------------------------------------------------------------------------- /source/articles/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: articles 3 | layout: articles 4 | date: 2017-04-24 12:58:45 5 | --- -------------------------------------------------------------------------------- /themes/griffin/source/plugins/morphext/morphext.css: -------------------------------------------------------------------------------- 1 | .morphext > .animated { 2 | display: inline-block; 3 | } -------------------------------------------------------------------------------- /themes/griffin/source/images/2fd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/2fd.png -------------------------------------------------------------------------------- /themes/griffin/source/images/kev3d.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/kev3d.PNG -------------------------------------------------------------------------------- /themes/griffin/source/images/kevin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/kevin.jpg -------------------------------------------------------------------------------- /themes/griffin/source/images/2fd-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/2fd-min.png -------------------------------------------------------------------------------- /themes/griffin/source/images/kev3d-min.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/kev3d-min.PNG -------------------------------------------------------------------------------- /themes/griffin/source/images/kevin-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/kevin-min.jpg -------------------------------------------------------------------------------- /themes/griffin/source/images/kevgriffin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/kevgriffin.png -------------------------------------------------------------------------------- /themes/griffin/source/images/revolutionconf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/revolutionconf.png -------------------------------------------------------------------------------- /themes/griffin/source/images/revolutionconf-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/images/revolutionconf-min.png -------------------------------------------------------------------------------- /themes/griffin/source/fonts/fontello/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/fontello/font/fontello.eot -------------------------------------------------------------------------------- /themes/griffin/source/fonts/fontello/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/fontello/font/fontello.ttf -------------------------------------------------------------------------------- /themes/griffin/source/fonts/fontello/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/fontello/font/fontello.woff -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/loader.gif -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/openhand.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/css/openhand.cur -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/coloredbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/coloredbg.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/gridtile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/gridtile.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/svg/svg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/svg/svg.zip -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/closedhand.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/css/closedhand.cur -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/fb.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/fr.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/ig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/ig.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/tw.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/vm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/vm.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/wc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/wc.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/yt.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/img/countdownLED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/jquery.countdown/img/countdownLED.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/owlcarousel2/assets/ajax-loader.gif -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_3x3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_3x3.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_white.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/post.png -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/owlcarousel2/assets/owl.video.play.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.eot -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.ttf -------------------------------------------------------------------------------- /themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/fonts/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/img/countdownGlowing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/jquery.countdown/img/countdownGlowing.gif -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_3x3_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/gridtile_3x3_white.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/revicons/revicons.woff -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/revolution_slide1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/revolution_slide1.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/assets/sources/revolution_slide2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/assets/sources/revolution_slide2.png -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.eot -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.ttf -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1kevgriff/kevgriffincom.v2/master/themes/griffin/source/plugins/rs-plugin-5/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.woff -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/fontello/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font license info 2 | 3 | 4 | ## Entypo 5 | 6 | Copyright (C) 2012 by Daniel Bruce 7 | 8 | Author: Daniel Bruce 9 | License: SIL (http://scripts.sil.org/OFL) 10 | Homepage: http://www.entypo.com 11 | 12 | 13 | ## Typicons 14 | 15 | (c) Stephen Hutchings 2012 16 | 17 | Author: Stephen Hutchings 18 | License: SIL (http://scripts.sil.org/OFL) 19 | Homepage: http://typicons.com/ 20 | 21 | 22 | -------------------------------------------------------------------------------- /source/thanks-signup-confirmed/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: You are confirmed! 3 | layout: generic 4 | date: 2017-06-29 06:34:08 5 | --- 6 | 7 | You're on the list. NO BACKSIES! 8 | 9 |

via GIPHY

-------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6 2 | RUN mkdir -p /usr/src/app 3 | 4 | ARG NODE_ENV=production 5 | ENV NODE_ENV $NODE_ENV 6 | 7 | ARG PORT=4000 8 | ENV PORT $PORT 9 | EXPOSE $PORT 5858 9229 10 | 11 | WORKDIR /usr/src 12 | COPY package.json /usr/src/ 13 | RUN npm install -g hexo 14 | RUN npm install && npm cache clean 15 | ENV PATH /data/node_modules/.bin:$PATH 16 | 17 | WORKDIR /usr/src/app 18 | COPY . /usr/src/app 19 | 20 | RUN hexo generate 21 | CMD hexo server -s 22 | 23 | -------------------------------------------------------------------------------- /themes/griffin/source/js/coming.soon.config.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | $(document).ready(function(){ 3 | // Set the time at which the countdown expires. 4 | // var untilDate new Date(Year, Month - 1, Day) 5 | //----------------------------------------------- 6 | var untilDate = new Date(2018, 2 - 1, 1); 7 | 8 | $(".countdown").countdown({ 9 | until: untilDate, 10 | format: 'dHMS', 11 | padZeroes: true 12 | }); 13 | 14 | }); // End document ready 15 | 16 | })(this.jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /themes/griffin/source/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /source/_posts/fix-my-computer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fix My Computer 3 | permalink: fix-my-computer 4 | date: 2017-05-02 23:30:55 5 | --- 6 | 7 | I get a lot of requests for companies in the Norfolk and Virginia Beach area that fix personal computers. Here are a couple references that I think are looking at. 8 | 9 | > These references come from friends of mine in the industry. I have not vetted any of these companies. Your milage might vary. 10 | 11 | *P&P PC* 12 | 2468 East Little Creek Road, Norfolk VA 23518 13 | (757)-531-3196 14 | [http://www.pandppc.com](http://www.pandppc.com) 15 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /source/_posts/ASPNET-40-To-ASPNET-Core.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Upgrading Your ASP.NET 4.0+ Skills to ASP.NET Core' 3 | permalink: asp-net-40-to-asp-net-core 4 | categories: 5 | - ASP.NET Core 6 | updated: '2013-01-24 04:34:48' 7 | date: 2019-04-12 05:00:46 8 | --- 9 | 10 | Have you recently attended one of my talks on "Upgrading Your ASP.NET 4.0+ Skills to ASP.NET Core"? 11 | 12 | I hope you enjoyed it! I would love to chat more about any questions you have! 13 | 14 | [CodeStock 2019 Slides](https://griffcdn.blob.core.windows.net/kevgriffinpublic/asp-net-40-to-asp-net-core/CodeStock%202019%20-%20Upgrading%20Your%20ASPNET%204%20Skills%20to%20ASPNET%20Core.pdf) -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.enabledLanguageIds": [ 3 | "asciidoc", 4 | "c", 5 | "cpp", 6 | "csharp", 7 | "css", 8 | "go", 9 | "handlebars", 10 | "html", 11 | "jade", 12 | "javascript", 13 | "javascriptreact", 14 | "json", 15 | "latex", 16 | "less", 17 | "markdown", 18 | "php", 19 | "plaintext", 20 | "pub", 21 | "python", 22 | "restructuredtext", 23 | "rust", 24 | "scss", 25 | "text", 26 | "typescript", 27 | "typescriptreact", 28 | "yml" 29 | ] 30 | } -------------------------------------------------------------------------------- /themes/griffin/_config.yml: -------------------------------------------------------------------------------- 1 | # Header 2 | menu: 3 | Home: / 4 | Archives: /archives 5 | rss: /atom.xml 6 | 7 | # Content 8 | excerpt_link: Read More 9 | fancybox: true 10 | 11 | # Sidebar 12 | sidebar: right 13 | widgets: 14 | - category 15 | - tag 16 | - tagcloud 17 | - archive 18 | - recent_posts 19 | 20 | # display widgets at the bottom of index pages (pagination == 2) 21 | index_widgets: 22 | # - category 23 | # - tagcloud 24 | # - archive 25 | 26 | # widget behavior 27 | archive_type: 'monthly' 28 | show_count: false 29 | 30 | # Miscellaneous 31 | google_analytics: 32 | favicon: /favicon.png 33 | twitter: 34 | google_plus: 35 | fb_admins: 36 | fb_app_id: 37 | -------------------------------------------------------------------------------- /source/_posts/One-Simple-Rule-for-Successful-Consulting.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: One Simple Rule for Successful Consulting 3 | permalink: one-simple-rule-for-successful-consulting 4 | categories: 5 | - Business 6 | date: 2014-09-03 00:16:57 7 | --- 8 | 9 | When you're suggesting business decisions for a client, think about it this way: 10 | 11 | > If you were to flip the roles, would you take the advice you are offering? 12 | 13 | Simply put: when I recommend tools, technologies, and other solutions to my clients, I want to always make sure that the suggestion I am providing is something I would do for my own business. 14 | 15 | Do that, and the clients will always keep coming back. -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-cy.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html Welsh initialisation for the jQuery countdown extension Written by Gareth Jones | http://garethvjones.com | October 2011. */ (function($) { 'use strict'; $.countdown.regionalOptions.cy = { labels: ['Blynyddoedd','Mis','Wythnosau','Diwrnodau','Oriau','Munudau','Eiliadau'], labels1: ['Blwyddyn','Mis','Wythnos','Diwrnod','Awr','Munud','Eiliad'], compactLabels: ['b','m','w','d'], whichLabels: null, digits: ['0','1','2','3','4','5','6','7','8','9'], timeSeparator: ':', 2 | isRTL: false }; $.countdown.setDefaults($.countdown.regionalOptions.cy); })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ja.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Japanese initialisation for the jQuery countdown extension 3 | Written by Ken Ishimoto (ken@ksroom.com) Aug 2009. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ja = { 7 | labels: ['年','月','週','日','時','分','秒'], 8 | labels1: ['年','月','週','日','時','分','秒'], 9 | compactLabels: ['年','月','週','日'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ja); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-nb.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Norwegian Bokmål translation 3 | Written by Kristian Ravnevand */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.nb = { 7 | labels: ['År','Måneder','Uker','Dager','Timer','Minutter','Sekunder'], 8 | labels1: ['År','Måned','Uke','Dag','Time','Minutt','Sekund'], 9 | compactLabels: ['Å','M','U','D'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.nb); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ko.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Korean initialisation for the jQuery countdown extension 3 | Written by Ryan Yu (ryanyu79@gmail.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ko = { 7 | labels: ['년','월','주','일','시','분','초'], 8 | labels1: ['년','월','주','일','시','분','초'], 9 | compactLabels: ['년','월','주','일'], 10 | compactLabels1: ['년','월','주','일'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions.ko); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-he.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Hebrew initialisation for the jQuery countdown extension 3 | * Translated by Nir Livne, Dec 2008 */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.he = { 7 | labels: ['שנים','חודשים','שבועות','ימים','שעות','דקות','שניות'], 8 | labels1: ['שנה','חודש','שבוע','יום','שעה','דקה','שנייה'], 9 | compactLabels: ['שנ','ח','שב','י'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: true 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.he); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-uz.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Uzbek initialisation for the jQuery countdown extension 3 | * Written by Alisher U. (ulugbekov{at}gmail.com) August 2012. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.uz = { 7 | labels: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'], 8 | labels1: ['Yil','Oy','Hafta','Kun','Soat','Daqiqa','Soniya'], 9 | compactLabels: ['y','o','h','k'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.uz); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-da.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Danish initialisation for the jQuery countdown extension 3 | Written by Buch (admin@buch90.dk). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.da = { 7 | labels: ['År','Måneder','Uger','Dage','Timer','Minutter','Sekunder'], 8 | labels1: ['År','Måned','Uge','Dag','Time','Minut','Sekund'], 9 | compactLabels: ['Å','M','U','D'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.da); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-de.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | German initialisation for the jQuery countdown extension 3 | Written by Samuel Wulf. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.de = { 7 | labels: ['Jahre','Monate','Wochen','Tage','Stunden','Minuten','Sekunden'], 8 | labels1: ['Jahr','Monat','Woche','Tag','Stunde','Minute','Sekunde'], 9 | compactLabels: ['J','M','W','T'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.de); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-hu.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Hungarian initialisation for the jQuery countdown extension 3 | * Written by Edmond L. (webmond@gmail.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.hu = { 7 | labels: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'], 8 | labels1: ['Év','Hónap','Hét','Nap','Óra','Perc','Másodperc'], 9 | compactLabels: ['É','H','Hé','N'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.hu); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-id.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Indonesian initialisation for the jQuery countdown extension 3 | Written by Erwin Yonathan Jan 2009. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.id = { 7 | labels: ['tahun','bulan','minggu','hari','jam','menit','detik'], 8 | labels1: ['tahun','bulan','minggu','hari','jam','menit','detik'], 9 | compactLabels: ['t','b','m','h'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.id); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-el.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Greek initialisation for the jQuery countdown extension 3 | Written by Philip. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.el = { 7 | labels: ['Χρόνια','Μήνες','Εβδομάδες','Μέρες','Ώρες','Λεπτά','Δευτερόλεπτα'], 8 | labels1: ['Χρόνος','Μήνας','Εβδομάδα','Ημέρα','Ώρα','Λεπτό','Δευτερόλεπτο'], 9 | compactLabels: ['Χρ.','Μην.','Εβδ.','Ημ.'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.el); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ro.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Romanian initialisation for the jQuery countdown extension 3 | * Written by Edmond L. (webmond@gmail.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ro = { 7 | labels: ['Ani','Luni','Saptamani','Zile','Ore','Minute','Secunde'], 8 | labels1: ['An','Luna','Saptamana','Ziua','Ora','Minutul','Secunda'], 9 | compactLabels: ['A','L','S','Z'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ro); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sv.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Swedish initialisation for the jQuery countdown extension 3 | Written by Carl (carl@nordenfelt.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.sv = { 7 | labels: ['År','Månader','Veckor','Dagar','Timmar','Minuter','Sekunder'], 8 | labels1: ['År','Månad','Vecka','Dag','Timme','Minut','Sekund'], 9 | compactLabels: ['Å','M','V','D'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.sv); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-tr.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Turkish initialisation for the jQuery countdown extension 3 | * Written by Bekir Ahmetoğlu (bekir@cerek.com) Aug 2008. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.tr = { 7 | labels: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'], 8 | labels1: ['Yıl','Ay','Hafta','Gün','Saat','Dakika','Saniye'], 9 | compactLabels: ['y','a','h','g'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.tr); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-vi.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Vietnamese initialisation for the jQuery countdown extension 3 | * Written by Pham Tien Hung phamtienhung@gmail.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.vi = { 7 | labels: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'], 8 | labels1: ['Năm','Tháng','Tuần','Ngày','Giờ','Phút','Giây'], 9 | compactLabels: ['năm','th','tu','ng'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.vi); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-zh-CN.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Simplified Chinese initialisation for the jQuery countdown extension 3 | Written by Cloudream (cloudream@gmail.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions['zh-CN'] = { 7 | labels: ['年','月','周','天','时','分','秒'], 8 | labels1: ['年','月','周','天','时','分','秒'], 9 | compactLabels: ['年','月','周','天'], 10 | compactLabels1: ['年','月','周','天'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions['zh-CN']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-zh-TW.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Traditional Chinese initialisation for the jQuery countdown extension 3 | Written by Cloudream (cloudream@gmail.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions['zh-TW'] = { 7 | labels: ['年','月','周','天','時','分','秒'], 8 | labels1: ['年','月','周','天','時','分','秒'], 9 | compactLabels: ['年','月','周','天'], 10 | compactLabels1: ['年','月','周','天'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions['zh-TW']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-hy.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Armenian initialisation for the jQuery countdown extension 3 | * Written by Artur Martirosyan. (artur{at}zoom.am) October 2011. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.hy = { 7 | labels: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'], 8 | labels1: ['Տարի','Ամիս','Շաբաթ','Օր','Ժամ','Րոպե','Վարկյան'], 9 | compactLabels: ['տ','ա','շ','օ'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.hy); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-kn.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Kannada initialization for the jQuery countdown extension 3 | * Written by Guru Chaturvedi guru@gangarasa.com (2011) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.kn = { 7 | labels: ['ವರ್ಷಗಳು','ತಿಂಗಳು','ವಾರಗಳು','ದಿನಗಳು','ಘಂಟೆಗಳು','ನಿಮಿಷಗಳು','ಕ್ಷಣಗಳು'], 8 | labels1: ['ವರ್ಷ','ತಿಂಗಳು','ವಾರ','ದಿನ','ಘಂಟೆ','ನಿಮಿಷ','ಕ್ಷಣ'], 9 | compactLabels: ['ವ','ತಿ','ವಾ','ದಿ'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.kn); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ms.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Malay initialisation for the jQuery countdown extension 3 | Written by Jason Ong (jason{at}portalgroove.com) May 2010. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ms = { 7 | labels: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'], 8 | labels1: ['Tahun','Bulan','Minggu','Hari','Jam','Minit','Saat'], 9 | compactLabels: ['t','b','m','h'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ms); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sq.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Albanian initialisation for the jQuery countdown extension 3 | Written by Erzen Komoni. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.sq = { 7 | labels: ['Vite','Muaj','Javë','Ditë','Orë','Minuta','Sekonda'], 8 | labels1: ['Vit','Muaj','Javë','Dit','Orë','Minutë','Sekond'], 9 | compactLabels: ['V','M','J','D'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.sq); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-th.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Thai initialisation for the jQuery countdown extension 3 | Written by Pornchai Sakulsrimontri (li_sin_th@yahoo.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.th = { 7 | labels: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'], 8 | labels1: ['ปี','เดือน','สัปดาห์','วัน','ชั่วโมง','นาที','วินาที'], 9 | compactLabels: ['ปี','เดือน','สัปดาห์','วัน'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.th); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ca.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Catalan initialisation for the jQuery countdown extension 3 | Written by Amanida Media www.amanidamedia.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ca = { 7 | labels: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'], 8 | labels1: ['Anys','Mesos','Setmanes','Dies','Hores','Minuts','Segons'], 9 | compactLabels: ['a','m','s','g'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ca); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /source/_posts/Enhancing-Your-Applications-For-Windows-7.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Enhancing Your Applications For Windows 7 3 | categories: 4 | - Development 5 | permalink: enhancing-your-applications-for-windows-7 6 | date: 2009-11-17 09:36:34 7 | --- 8 | 9 |

I invite you to head over to Developer Fusion, and read my article on "Enhancing Your Applications For Windows 7”.  If you haven’t played with the Windows 7 API Code Pack yet, I definitely recommend it.

http://www.developerfusion.com/article/70531/enhancing-your-applications-for-windows-7/

-------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ar.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Arabic (عربي) initialisation for the jQuery countdown extension 3 | Translated by Talal Al Asmari (talal@psdgroups.com), April 2009. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ar = { 7 | labels: ['سنوات','أشهر','أسابيع','أيام','ساعات','دقائق','ثواني'], 8 | labels1: ['سنة','شهر','أسبوع','يوم','ساعة','دقيقة','ثانية'], 9 | compactLabels: ['س','ش','أ','ي'], 10 | whichLabels: null, 11 | digits: ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩'], 12 | timeSeparator: ':', 13 | isRTL: true 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ar); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-gl.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Galician initialisation for the jQuery countdown extension 3 | * Written by Moncho Pena ramon.pena.rodriguez@gmail.com (2009) and Angel Farrapeira */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.gl = { 7 | labels: ['Anos','Meses','Semanas','Días','Horas','Minutos','Segundos'], 8 | labels1: ['Ano','Mes','Semana','Día','Hora','Minuto','Segundo'], 9 | compactLabels: ['a','m','s','g'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.gl); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-gu.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Gujarati initialization for the jQuery countdown extension 3 | * Written by Sahil Jariwala jariwala.sahil@gmail.com (2012) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.gu = { 7 | labels: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'], 8 | labels1: ['વર્ષ','મહિનો','અઠવાડિયા','દિવસ','કલાક','મિનિટ','સેકન્ડ'], 9 | compactLabels: ['વ','મ','અ','દિ'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.gu); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-my.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Burmese initialisation for the jQuery countdown extension 3 | Written by Win Lwin Moe (winnlwinmoe@gmail.com) Dec 2009. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.my = { 7 | labels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'], 8 | labels1: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္','နာရီ','မိနစ္','စကဿကန့္'], 9 | compactLabels: ['နွစ္','လ','ရက္သတဿတပတ္','ရက္'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.my); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-nl.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Dutch initialisation for the jQuery countdown extension 3 | Written by Mathias Bynens Mar 2008. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.nl = { 7 | labels: ['Jaren','Maanden','Weken','Dagen','Uren','Minuten','Seconden'], 8 | labels1: ['Jaar','Maand','Week','Dag','Uur','Minuut','Seconde'], 9 | compactLabels: ['j','m','w','d'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.nl); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-lt.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Lithuanian localisation for the jQuery countdown extension 3 | * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.lt = { 7 | labels: ['Metų','Mėnesių','Savaičių','Dienų','Valandų','Minučių','Sekundžių'], 8 | labels1: ['Metai','Mėnuo','Savaitė','Diena','Valanda','Minutė','Sekundė'], 9 | compactLabels: ['m','m','s','d'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.lt); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ur.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Urdu (اردو) initialisation for the jQuery countdown extension 3 | Translated by Azhar Rasheed (azhar.rasheed19@gmail.com), November 2013. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ur = { 7 | labels: ['سال','مہينے','ہفتے','دن','گھنٹے','منٹس','سيکنڑز'], 8 | labels1: ['سال','ماہ','ہفتہ','دن','گھنٹہ','منٹ','سیکنڈز'], 9 | compactLabels: ['(ق)','سینٹ','ایک','J'], 10 | whichLabels: null, 11 | digits: ['٠','١','٢','٣','۴','۵','۶','۷','٨','٩'], 12 | timeSeparator: ':', 13 | isRTL: true 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.ur); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /source/_posts/Enable-SignalR-Logging-with-One-Simple-Line.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Enable SignalR Logging with One Simple Line 3 | categories: 4 | - "Development - ASP.NET" 5 | permalink: signalr-logging 6 | date: 2015-08-28 23:26:42 7 | --- 8 | 9 | It is easy to think that SignalR works within a black box, but if you are deploying JavaScript clients, here is an EASY trick to learning what is happening underneath the scenes. 10 | 11 | Before you start your connection, add this ONE line of code: 12 | 13 | ```javascript 14 | $.connection.hub.logging = true; 15 | $.connection.hub.start(); 16 | ``` 17 | 18 | Tada! You have logging in your browser console: 19 | 20 | ![](https://griffcdn.blob.core.windows.net/kevgriffinpublic/signalr-logging/logging_preview.png) -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-es.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Spanish initialisation for the jQuery countdown extension 3 | * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.es = { 7 | labels: ['Años','Meses','Semanas','Días','Horas','Minutos','Segundos'], 8 | labels1: ['Año','Mes','Semana','Día','Hora','Minuto','Segundo'], 9 | compactLabels: ['a','m','s','d'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.es); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-fo.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Faroese initialisation for the jQuery countdown extension 3 | Written by Kasper Friis Christensen (kasper@friischristensen.com). */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.fo = { 7 | labels: ['Ár','Mánaðir','Vikur','Dagar','Tímar','Minuttir','Sekund'], 8 | labels1: ['Ár','Mánaður','Vika','Dagur','Tími','Minuttur','Sekund'], 9 | compactLabels: ['Á','M','V','D'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.fo); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-is.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Icelandic initialisation for the jQuery countdown extension 3 | Written by Róbert K. L. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.is = { 7 | labels: ['Ár','Mánuðir','Vikur','Dagar','Klukkustundir','Mínútur','Sekúndur'], 8 | labels1: ['Ár','Mánuður','Vika','Dagur','Klukkustund','Mínúta','Sekúnda'], 9 | compactLabels: ['ár.','mán.','vik.','dag.','klst.','mín.','sek.'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.is); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-et.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Estonian initialisation for the jQuery countdown extension 3 | Written by Helmer */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.et = { 7 | labels: ['Aastat','Kuud','Nädalat','Päeva','Tundi','Minutit','Sekundit'], 8 | labels1: ['Aasta','Kuu','Nädal','Päev','Tund','Minut','Sekund'], 9 | compactLabels: ['a','k','n','p'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.et); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-it.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Italian initialisation for the jQuery countdown extension 3 | * Written by Davide Bellettini (davide.bellettini@gmail.com) and Roberto Chiaveri Feb 2008. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.it = { 7 | labels: ['Anni','Mesi','Settimane','Giorni','Ore','Minuti','Secondi'], 8 | labels1: ['Anno','Mese','Settimana','Giorno','Ora','Minuto','Secondo'], 9 | compactLabels: ['a','m','s','g'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.it); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-bg.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Bulgarian initialisation for the jQuery countdown extension 3 | * Written by Manol Trendafilov manol@rastermania.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.bg = { 7 | labels: ['Години','Месеца','Седмица','Дни','Часа','Минути','Секунди'], 8 | labels1: ['Година','Месец','Седмица','Ден','Час','Минута','Секунда'], 9 | compactLabels: ['l','m','n','d'], 10 | compactLabels1: ['g','m','n','d'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions.bg); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /themes/griffin/source/css/print-invoice.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: The Project - Responsive Website Template 3 | Author: HtmlCoder 4 | Author URI: http://www.htmlcoder.me 5 | Author e-mail: htmlcoder.me@gmail.com 6 | Version: 1.4.0 7 | Created: May 2015 8 | License URI: http://support.wrapbootstrap.com/ 9 | File Description: CSS rules for invoice print 10 | */ 11 | 12 | .header-top, 13 | .header, 14 | .page-intro, 15 | .page-title, 16 | .parallax, 17 | .call-to-action, 18 | .section, 19 | #footer, 20 | .scrollToTop, 21 | .btn-print, 22 | .breadcrumb-container { 23 | display: none!important; 24 | } 25 | 26 | .col-sm-offset-3 { 27 | margin-left: 25%; 28 | } 29 | .col-sm-3 { 30 | width: 25%; 31 | float: left; 32 | } 33 | .col-sm-6 { 34 | width: 50%; 35 | float: left; 36 | } 37 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-fa.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Persian (فارسی) initialisation for the jQuery countdown extension 3 | Written by Alireza Ziaie (ziai@magfa.com) Oct 2008. 4 | Digits corrected by Hamed Ramezanian Feb 2013. */ 5 | (function($) { 6 | 'use strict'; 7 | $.countdown.regionalOptions.fa = { 8 | labels: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'], 9 | labels1: ['سال','ماه','هفته','روز','ساعت','دقیقه','ثانیه'], 10 | compactLabels: ['س','م','ه','ر'], 11 | whichLabels: null, 12 | digits: ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'], 13 | timeSeparator: ':', 14 | isRTL: true 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions.fa); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /source/_posts/Interview-with-Michael-Rollins-for-HRDevFest-2016.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Interview with Michael Rollins for HRDevFest 2016 3 | categories: 4 | - Community, User Groups, and Conferences 5 | permalink: interview-with-michael-rollins-for-hrdevfest-2016 6 | date: 2016-09-01 10:56:33 7 | --- 8 | 9 | Recently, I had the opportunity to sit down with my friend [Michael Rollins](http://www.rollins.io) to talk about life as a mobile SDK developer, drones, and his upcoming HRDevFest keynote on growth through suffering. 10 | 11 | Watch the interview for yourself! Get your tickets for HRDevfest at [http://hrdevfest.org!](http://hrdevfest.org) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-bn.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Bengali/Bangla initialisation for the jQuery countdown extension 3 | * Written by Mohammed Tajuddin (tajuddin@chittagong-it.com) Jan 2011. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.bn = { 7 | labels: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'], 8 | labels1: ['বছর','মাস','সপ্তাহ','দিন','ঘন্টা','মিনিট','সেকেন্ড'], 9 | compactLabels: ['ব','মা','স','দি'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.bn); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-fi.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Finnish initialisation for the jQuery countdown extension 3 | Written by Kalle Vänskä and Juha Suni (juhis.suni@gmail.com). Corrected by Olli. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.fi = { 7 | labels: ['vuotta','kuukautta','viikkoa','päivää','tuntia','minuuttia','sekuntia'], 8 | labels1: ['vuosi','kuukausi','viikko','päivä','tunti','minuutti','sekunti'], 9 | compactLabels: ['v','kk','vk','pv'], 10 | whichLabels: null, 11 | digits: ['0','1','2','3','4','5','6','7','8','9'], 12 | timeSeparator: ':', 13 | isRTL: false 14 | }; 15 | $.countdown.setDefaults($.countdown.regionalOptions.fi); 16 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-mk.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Macedonian initialisation for the jQuery countdown extension 3 | * Written by Gorast Cvetkovski cvetkovski@gorast.com (2016) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.mk = { 7 | labels: ['Години','Месеци','Недели','Дена','Часа','Минути','Секунди'], 8 | labels1: ['Година','Месец','Недела','Ден','Час','Минута','Секунда'], 9 | compactLabels: ['l','m','n','d'], 10 | compactLabels1: ['g','m','n','d'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions.mk); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /source/thanks-signup/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thanks for signing up 3 | layout: generic 4 | date: 2017-06-29 06:34:08 5 | --- 6 | 7 | You're totally awesome! You won't regret this decision! An email is CURRENTLY on its way to your inbox. We just want to make sure this is what you really want. Go check it now **now** now. 8 | 9 |

via GIPHY

10 | 11 | Since I have your attention for a moment, take a second to [Follow Me on Twitter](https://twitter.com/1kevgriff)! 12 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-lv.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Latvian initialisation for the jQuery countdown extension 3 | * Written by Jānis Peisenieks janis.peisenieks@gmail.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.lv = { 7 | labels: ['Gadi','Mēneši','Nedēļas','Dienas','Stundas','Minūtes','Sekundes'], 8 | labels1: ['Gads','Mēnesis','Nedēļa','Diena','Stunda','Minūte','Sekunde'], 9 | compactLabels: ['l','m','n','d'], 10 | compactLabels1: ['g','m','n','d'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions.lv); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /source/_posts/Simple-HTML-Formatting-in-Sublime-Text.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Simple HTML Formatting in Sublime Text 3 | categories: 4 | - Development 5 | permalink: simple-html-formatting-in-sublime-text 6 | id: 730 7 | updated: '2013-02-27 05:17:35' 8 | date: 2013-02-27 06:00:16 9 | --- 10 | 11 | One common questions I've asked and seen asked quite a bit about Sublime Text is how to quickly and easily format HTML while editing.  There isn't a default key binding for this, but if you select all text and then go to: 12 |
Edit -> Lines -> Reindent
13 | Want to create your own keybinding?  Go to Preferences, Key Bindings - User and add this line: 14 |
{ "keys": ["ctrl+shift+r"], "command": "reindent" , "args": {"single_line": false}}
15 | Enjoy! -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-fr.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | French initialisation for the jQuery countdown extension 3 | Written by Keith Wood (wood.keith{at}optusnet.com.au) Jan 2008. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.fr = { 7 | labels: ['Années','Mois','Semaines','Jours','Heures','Minutes','Secondes'], 8 | labels1: ['Année','Mois','Semaine','Jour','Heure','Minute','Seconde'], 9 | compactLabels: ['a','m','s','j'], 10 | whichLabels: function(amount) { 11 | return (amount > 1 ? 0 : 1); 12 | }, 13 | digits: ['0','1','2','3','4','5','6','7','8','9'], 14 | timeSeparator: ':', 15 | isRTL: false 16 | }; 17 | $.countdown.setDefaults($.countdown.regionalOptions.fr); 18 | })(jQuery); 19 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-pt-BR.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | Brazilian initialisation for the jQuery countdown extension 3 | Translated by Marcelo Pellicano de Oliveira (pellicano@gmail.com) Feb 2008. 4 | and Juan Roldan (juan.roldan[at]relayweb.com.br) Mar 2012. */ 5 | (function($) { 6 | 'use strict'; 7 | $.countdown.regionalOptions['pt-BR'] = { 8 | labels: ['Anos','Meses','Semanas','Dias','Horas','Minutos','Segundos'], 9 | labels1: ['Ano','Mês','Semana','Dia','Hora','Minuto','Segundo'], 10 | compactLabels: ['a','m','s','d'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | timeSeparator: ':', 14 | isRTL: false 15 | }; 16 | $.countdown.setDefaults($.countdown.regionalOptions['pt-BR']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /source/_posts/Wildcard-search-with-LINQ.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wildcard search with LINQ 3 | categories: 4 | - "Development - C#" 5 | permalink: wildcard-search-with-linq 6 | date: 2009-04-21 09:17:26 7 | --- 8 | 9 | I just a situation where I needed to perform a wildcard search on a table in my database.  When I used to do ADO.NET, I would simply write my SELECT statements with LIKE keywords to do wildcard searches. 10 | 11 | However, in this project, I'm using LINQ to Entities and the solution didn't work the same way as it did back in SQL land.  My alternative was to use the .Contains() method. 12 | 13 | For example: 14 |
var userList = from u in entity.Users
15 | where u.FirstName.Contains(searchParameter) ||
16 | u.LastName.Contains(searchParameter)
17 | select u;
18 | 19 | Hope this helps if you ever run into this problem. -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-cs.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Czech initialisation for the jQuery countdown extension 3 | * Written by Roman Chlebec (creamd@c64.sk) (2008) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.cs = { 7 | labels: ['Roků','Měsíců','Týdnů','Dní','Hodin','Minut','Sekund'], 8 | labels1: ['Rok','Měsíc','Týden','Den','Hodina','Minuta','Sekunda'], 9 | labels2: ['Roky','Měsíce','Týdny','Dny','Hodiny','Minuty','Sekundy'], 10 | compactLabels: ['r','m','t','d'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions.cs); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sk.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Slovak initialisation for the jQuery countdown extension 3 | * Written by Roman Chlebec (creamd@c64.sk) (2008) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.sk = { 7 | labels: ['Rokov','Mesiacov','Týždňov','Dní','Hodín','Minút','Sekúnd'], 8 | labels1: ['Rok','Mesiac','Týždeň','Deň','Hodina','Minúta','Sekunda'], 9 | labels2: ['Roky','Mesiace','Týždne','Dni','Hodiny','Minúty','Sekundy'], 10 | compactLabels: ['r','m','t','d'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions.sk); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /source/_posts/Learn-about-Windows-7-Task-Dialogs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Learn about Windows 7 Task Dialogs 3 | categories: 4 | - Development 5 | permalink: learn-about-windows-7-task-dialogs 6 | id: 635 7 | updated: '2009-12-01 07:00:00' 8 | date: 2009-12-01 07:00:00 9 | --- 10 | 11 |

Please take a few minutes and travel over to DeveloperFusion where my latest article on Windows 7 Task Dialogs has been published.  If you’ve never used a task dialog before, I would definitely recommend them.  I consider them “Message Box 2.0”.

http://www.developerfusion.com/article/71793/smarten-up-your-ui-with-task-dialogs-the-message-box-20/

Let me know what you think!

-------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sr.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Serbian Cyrillic initialisation for the jQuery countdown extension 3 | * Written by Predrag Leka lp@lemurcake.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.sr = { 7 | labels: ['Година','Месеци','Недеља','Дана','Часова','Минута','Секунди'], 8 | labels1: ['Година','месец','Недеља','Дан','Час','Минут','Секунда'], 9 | labels2: ['Године','Месеца','Недеље','Дана','Часа','Минута','Секунде'], 10 | compactLabels: ['г','м','н','д'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions.sr); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sr-SR.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Serbian Latin initialisation for the jQuery countdown extension 3 | * Written by Predrag Leka lp@lemurcake.com (2010) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions['sr-SR'] = { 7 | labels: ['Godina','Meseci','Nedelja','Dana','Časova','Minuta','Sekundi'], 8 | labels1: ['Godina','Mesec','Nedelja','Dan','Čas','Minut','Sekunda'], 9 | labels2: ['Godine','Meseca','Nedelje','Dana','Časa','Minuta','Sekunde'], 10 | compactLabels: ['g','m','n','d'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions['sr-SR']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /source/_posts/Powershell-How-to-recursively-delete-files-based-of-file-extension.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Powershell: How to recursively delete files based of file extension?' 3 | categories: 4 | - Development 5 | permalink: powershell-how-to-recursively-delete-files-based-of-file-extension 6 | id: 789 7 | updated: '2016-07-15 14:23:38' 8 | date: 2016-07-15 14:15:43 9 | --- 10 | 11 | File this under "took me WAY too long to figure out how to do". 12 | 13 | I just finished doing a Git merge, and ran into an issue where my working folder was polluted with .orig files. 14 | 15 | I wanted to recursively delete all the .orig files. That is apparently harder than it sounds, because it took me 15 minutes to figure out the correct command line. 16 | 17 | So you don't go fumbling like I did: 18 | 19 | ``` 20 | Get-ChildItem . -recurse -include *.orig | remove-item 21 | ``` 22 | 23 | Replace `.` and `*.orig` accordingly. Have fun! -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ml.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Malayalam/(Indian>>Kerala) initialisation for the jQuery countdown extension 3 | * Written by Harilal.B (harilal1234@gmail.com) Feb 2013. */ 4 | (function($) { 5 | 'use strict'; 6 | /* jshint -W100 */ 7 | $.countdown.regionalOptions.ml = { 8 | labels: ['വര്‍ഷങ്ങള്‍','മാസങ്ങള്‍','ആഴ്ചകള്‍','ദിവസങ്ങള്‍','മണിക്കൂറുകള്‍','മിനിറ്റുകള്‍','സെക്കന്റുകള്‍'], 9 | labels1: ['വര്‍ഷം','മാസം','ആഴ്ച','ദിവസം','മണിക്കൂര്‍','മിനിറ്റ്','സെക്കന്റ്'], 10 | compactLabels: ['വ','മ','ആ','ദി'], 11 | whichLabels: null, 12 | digits: ['0','1','2','3','4','5','6','7','8','9'], 13 | // digits: ['൦','൧','൨','൩','൪','൫','൬','൭','൮','൯'], 14 | timeSeparator: ':', 15 | isRTL: false 16 | }; 17 | $.countdown.setDefaults($.countdown.regionalOptions.ml); 18 | })(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-bs.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Bosnian Latin initialisation for the jQuery countdown extension 3 | * Written by Miralem Mehic miralem@mehic.info (2011) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.bs = { 7 | labels: ['Godina','Mjeseci','Sedmica','Dana','Sati','Minuta','Sekundi'], 8 | labels1: ['Godina','Mjesec','Sedmica','Dan','Sat','Minuta','Sekunda'], 9 | labels2: ['Godine','Mjeseca','Sedmica','Dana','Sata','Minute','Sekunde'], 10 | compactLabels: ['g','m','t','d'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >= 2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions.bs); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /source/_posts/50-Ways-to-Avoid-Find-and-Fix-ASP-NET-Performance-Issues.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '50 Ways to Avoid, Find and Fix ASP.NET Performance Issues' 3 | permalink: 50-ways-to-avoid-find-and-fix-asp-net-performance-issues 4 | categories: 5 | - Self Promotion 6 | id: 728 7 | updated: '2013-01-24 04:34:48' 8 | date: 2013-01-25 05:00:46 9 | --- 10 | 11 | A couple weeks ago there was a public request on Twitter from the great folks at RedGate to provide tips and tricks for performance in ASP.NET applications.  Come to find out, they selected one of my tips and published it in their ebook "50 Ways to Avoid, Find and Fix ASP.NET Performance Issues". 12 | 13 | It's a free download: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/avoid-find-fix-asp-problems 14 | 15 | Go grab it today! -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-uk.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Ukrainian initialisation for the jQuery countdown extension 3 | * Written by Goloborodko M misha.gm@gmail.com (2009), corrections by Iгор Kоновал */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.uk = { 7 | labels: ['Років','Місяців','Тижнів','Днів','Годин','Хвилин','Секунд'], 8 | labels1: ['Рік','Місяць','Тиждень','День','Година','Хвилина','Секунда'], 9 | labels2: ['Роки','Місяці','Тижні','Дні','Години','Хвилини','Секунди'], 10 | compactLabels: ['r','m','t','d'], 11 | whichLabels: function(amount) { 12 | return (amount === 1 ? 1 : (amount >=2 && amount <= 4 ? 2 : 0)); 13 | }, 14 | digits: ['0','1','2','3','4','5','6','7','8','9'], 15 | timeSeparator: ':', 16 | isRTL: false 17 | }; 18 | $.countdown.setDefaults($.countdown.regionalOptions.uk); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /themes/griffin/source/css/custom.css: -------------------------------------------------------------------------------- 1 | /* Theme Name: The Project - Responsive Website Template 2 | Author:HtmlCoder 3 | Author URI:http://www.htmlcoder.me 4 | Author e-mail:htmlcoder.me@gmail.com 5 | Version:1.4.0 6 | Created:December 2014 7 | License URI:http://support.wrapbootstrap.com/ 8 | File Description: Place here your custom CSS styles 9 | */ 10 | 11 | #carbonads { 12 | display: block; 13 | overflow: hidden; 14 | padding: 1em; 15 | font-size: .7em; 16 | line-height: 1.5; 17 | } 18 | 19 | #carbonads a { 20 | text-decoration: none; 21 | } 22 | 23 | #carbonads span { 24 | display: block; 25 | overflow: hidden; 26 | } 27 | 28 | .carbon-text { 29 | display: block; 30 | float: left; 31 | max-width: 40%; 32 | text-align: left; 33 | } 34 | 35 | .carbon-img { 36 | float: left; 37 | margin-right: 1em; 38 | } 39 | 40 | .carbon-poweredby { 41 | display: block; 42 | margin-top: -1.9em; 43 | text-align: right; 44 | font-size: .8em; 45 | } -------------------------------------------------------------------------------- /themes/griffin/source/plugins/morphext/morphext.min.js: -------------------------------------------------------------------------------- 1 | /*! Morphext - v2.4.4 - 2015-05-21 */!function(a){"use strict";function b(b,c){this.element=a(b),this.settings=a.extend({},d,c),this._defaults=d,this._init()}var c="Morphext",d={animation:"bounceIn",separator:",",speed:2e3,complete:a.noop};b.prototype={_init:function(){var b=this;this.phrases=[],this.element.addClass("morphext"),a.each(this.element.text().split(this.settings.separator),function(c,d){b.phrases.push(a.trim(d))}),this.index=-1,this.animate(),this.start()},animate:function(){this.index=++this.index%this.phrases.length,this.element[0].innerHTML=''+this.phrases[this.index]+"",a.isFunction(this.settings.complete)&&this.settings.complete.call(this)},start:function(){var a=this;this._interval=setInterval(function(){a.animate()},this.settings.speed)},stop:function(){this._interval=clearInterval(this._interval)}},a.fn[c]=function(d){return this.each(function(){a.data(this,"plugin_"+c)||a.data(this,"plugin_"+c,new b(this,d))})}}(jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-pl.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Polish initialisation for the jQuery countdown extension 3 | * Written by Pawel Lewtak lewtak@gmail.com (2008) */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.pl = { 7 | labels: ['lat','miesięcy','tygodni','dni','godzin','minut','sekund'], 8 | labels1: ['rok','miesiąc','tydzień','dzień','godzina','minuta','sekunda'], 9 | labels2: ['lata','miesiące','tygodnie','dni','godziny','minuty','sekundy'], 10 | compactLabels: ['l','m','t','d'], 11 | compactLabels1: ['r','m','t','d'], 12 | whichLabels: function(amount) { 13 | var units = amount % 10; 14 | var tens = Math.floor((amount % 100) / 10); 15 | return (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 : 0)); 16 | }, 17 | digits: ['0','1','2','3','4','5','6','7','8','9'], 18 | timeSeparator: ':', 19 | isRTL: false 20 | }; 21 | $.countdown.setDefaults($.countdown.regionalOptions.pl); 22 | })(jQuery); 23 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.0 3 | * Copyright 2013-2016 David Deutsch 4 | * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/owl.theme.green.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.0 3 | * Copyright 2013-2016 David Deutsch 4 | * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-ru.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Russian initialisation for the jQuery countdown extension 3 | * Written by Sergey K. (xslade{at}gmail.com) June 2010. */ 4 | (function($) { 5 | 'use strict'; 6 | $.countdown.regionalOptions.ru = { 7 | labels: ['Лет','Месяцев','Недель','Дней','Часов','Минут','Секунд'], 8 | labels1: ['Год','Месяц','Неделя','День','Час','Минута','Секунда'], 9 | labels2: ['Года','Месяца','Недели','Дня','Часа','Минуты','Секунды'], 10 | compactLabels: ['л','м','н','д'], 11 | compactLabels1: ['г','м','н','д'], 12 | whichLabels: function(amount) { 13 | var units = amount % 10; 14 | var tens = Math.floor((amount % 100) / 10); 15 | return (amount === 1 ? 1 : (units >= 2 && units <= 4 && tens !== 1 ? 2 : 16 | (units === 1 && tens !== 1 ? 1 : 0))); 17 | }, 18 | digits: ['0','1','2','3','4','5','6','7','8','9'], 19 | timeSeparator: ':', 20 | isRTL: false 21 | }; 22 | $.countdown.setDefaults($.countdown.regionalOptions.ru); 23 | })(jQuery); -------------------------------------------------------------------------------- /source/_posts/Specifying-Visual-Studio-Version-in-NPM-Installs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Specifying Visual Studio Version in NPM Installs 3 | categories: 4 | - Development 5 | permalink: specifying-visual-studio-version-in-npm-installs 6 | date: 2013-05-14 06:34:08 7 | --- 8 | 9 | Sometimes when you install a NPM package, you'll run into an issue like this: 10 |
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(35,5): error MSB8020: The builds tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install Visual Studio 2010 to build using the Visual Studio 2010 build tools.
11 | Normally you'll get this if you're only running VS2012 and it wants VS2010/VS2008.  You can ask NPM to use Visual Studio 2012 instead by using with "--msvs_version=2012" command. 12 | 13 | Example: 14 |
npm install socket.io --msvs_version=2012
15 | Tada.  This should work almost every time. -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-sl.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Slovenian localisation for the jQuery countdown extension 3 | * Written by Borut Tomažin (debijan{at}gmail.com) (2011) 4 | * updated by Jan Zavrl (jan@iuvo.si) (2015) */ 5 | (function($) { 6 | 'use strict'; 7 | $.countdown.regionalOptions.sl = { 8 | labels: ['Let','Mesecev','Tednov','Dni','Ur','Minut','Sekund'], // Plurals 9 | labels1: ['Leto','Mesec','Teden','Dan','Ura','Minuta','Sekunda'], // Singles 10 | labels2: ['Leti','Meseca','Tedna','Dneva','Uri','Minuti','Sekundi'], // Doubles 11 | labels3: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 3's 12 | labels4: ['Leta','Meseci','Tedni','Dnevi','Ure','Minute','Sekunde'], // 4's 13 | compactLabels: ['l','m','t','d'], 14 | whichLabels: function(amount) { 15 | return (amount > 4 ? 0 : amount); 16 | }, 17 | digits: ['0','1','2','3','4','5','6','7','8','9'], 18 | timeSeparator: ':', 19 | isRTL: false 20 | }; 21 | $.countdown.setDefaults($.countdown.regionalOptions.sl); 22 | })(jQuery); 23 | -------------------------------------------------------------------------------- /source/_posts/If-You-Reach-Just-One-Person.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: If You Reach Just One Person 3 | categories: 4 | - Deep Thoughts 5 | permalink: if-you-reach-just-one-person 6 | id: 660 7 | updated: '2010-03-29 06:00:00' 8 | date: 2010-03-29 06:00:00 9 | --- 10 | 11 |

After giving a talk, it’s really difficult to judge if you reached any of the attendee’s.  Normally, you get the occasional “good job” or “thanks, that was a big help.”  Today I got a small mention by Johnathan Bracken, who was sitting in my jQuery From The Ground Up talk at Roanoke Code Camp.  This means a lot, because it shows that my talk stayed in Johnathan’s head past the end of the talk. 

He just started blogging, and mentioned me in his entry I Will Not Run from JavaScript No More. This is very cool to see.  I wish Johnathan the best of luck in his jQuery adventures!  And I expect him to give a jQuery talk at next year’s code camp.

-------------------------------------------------------------------------------- /themes/griffin/source/plugins/pace/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 HubSpot, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /themes/griffin/source/js/google.map.config.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | $(document).ready(function(){ 3 | 4 | // Google Maps 5 | //----------------------------------------------- 6 | if ($("#map-canvas").length>0) { 7 | var map, myLatlng, myZoom, marker; 8 | // Set the coordinates of your location 9 | myLatlng = new google.maps.LatLng(41.38791700, 2.16991870); 10 | myZoom = 12; 11 | function initialize() { 12 | var mapOptions = { 13 | zoom: myZoom, 14 | mapTypeId: google.maps.MapTypeId.ROADMAP, 15 | center: myLatlng, 16 | scrollwheel: false 17 | }; 18 | map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions); 19 | marker = new google.maps.Marker({ 20 | map:map, 21 | draggable:true, 22 | animation: google.maps.Animation.DROP, 23 | position: myLatlng 24 | }); 25 | google.maps.event.addDomListener(window, "resize", function() { 26 | map.setCenter(myLatlng); 27 | }); 28 | } 29 | google.maps.event.addDomListener(window, "load", initialize); 30 | } 31 | }); // End document ready 32 | 33 | })(this.jQuery); -------------------------------------------------------------------------------- /themes/griffin/source/plugins/charts/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2013-2016 Nick Downie 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kevgriffincom ", 3 | "version": "2.0.0", 4 | "private": true, 5 | "hexo": { 6 | "version": "3.8.0" 7 | }, 8 | "dependencies": { 9 | "hexo": "^3.8.0", 10 | "hexo-all-minifier": "^0.5.2", 11 | "hexo-deployer-git": "^0.3.1", 12 | "hexo-generator-archive": "^0.1.4", 13 | "hexo-generator-category": "^0.1.3", 14 | "hexo-generator-feed": "^1.2.0", 15 | "hexo-generator-index": "^0.2.0", 16 | "hexo-generator-sitemap": "^1.1.2", 17 | "hexo-generator-tag": "^0.2.0", 18 | "hexo-helper-recent_posts": "0.0.2", 19 | "hexo-migrator-ghost": "^0.1.0", 20 | "hexo-migrator-rss": "^0.1.2", 21 | "hexo-renderer-ejs": "^0.3.1", 22 | "hexo-renderer-handlebars": "^2.0.2", 23 | "hexo-renderer-markdown": "^1.1.1", 24 | "hexo-renderer-marked": "^0.3.2", 25 | "hexo-renderer-stylus": "^0.3.1", 26 | "hexo-server": "^0.3.3", 27 | "hexo-tag-video": "0.0.2" 28 | }, 29 | "scripts": { 30 | "start": "hexo server -s", 31 | "prestart": "npm install -g hexo && hexo generate", 32 | "docker": "docker push 1kevgriff/kevgriffincom:latest" 33 | } 34 | } -------------------------------------------------------------------------------- /source/_posts/Exploring-C-7-0-Out-Variables.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Exploring C# 7.0: Out Variables' 3 | permalink: exploring-csharp70-out-variables 4 | categories: 5 | - "Development - C#" 6 | date: 2016-11-08 18:41:48 7 | --- 8 | 9 | _In this series, I want to explore a couple of the new C# 7.0 features coming down the pipeline. As with most things, I am working with preview bits, so these features are not guaranteed to work the same way in production._ 10 | 11 | Using the out keyword within C# is nothing new. If you declare a variable within a method called with **out**, you are instructing the compile that you are expecting the method to set the values of those at runtime. 12 | 13 | 14 | 15 | Commonly the problem is that you have to declare the variable before the method call using out. In C# 7.0, there is the concept of out variables, which will save you a couple keystrokes by allowing you to declare the variable inline. 16 | 17 | The above example can be quickly refactored: 18 | 19 | 20 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/css/jquery.countdown.css: -------------------------------------------------------------------------------- 1 | /* jQuery Countdown styles 2.0.0. */ 2 | .is-countdown { 3 | border: 1px solid #ccc; 4 | background-color: #eee; 5 | } 6 | .countdown-rtl { 7 | direction: rtl; 8 | } 9 | .countdown-holding span { 10 | color: #888; 11 | } 12 | .countdown-row { 13 | clear: both; 14 | width: 100%; 15 | padding: 0px 2px; 16 | text-align: center; 17 | } 18 | .countdown-show1 .countdown-section { 19 | width: 98%; 20 | } 21 | .countdown-show2 .countdown-section { 22 | width: 48%; 23 | } 24 | .countdown-show3 .countdown-section { 25 | width: 32.5%; 26 | } 27 | .countdown-show4 .countdown-section { 28 | width: 24.5%; 29 | } 30 | .countdown-show5 .countdown-section { 31 | width: 19.5%; 32 | } 33 | .countdown-show6 .countdown-section { 34 | width: 16.25%; 35 | } 36 | .countdown-show7 .countdown-section { 37 | width: 14%; 38 | } 39 | .countdown-section { 40 | display: block; 41 | float: left; 42 | font-size: 75%; 43 | text-align: center; 44 | } 45 | .countdown-amount { 46 | font-size: 200%; 47 | } 48 | .countdown-period { 49 | display: block; 50 | } 51 | .countdown-descr { 52 | display: block; 53 | width: 100%; 54 | } 55 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Owl 2 | Modified work Copyright 2016 David Deutsch 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /source/_posts/How-to-run-Visual-Studio-Code-from-Zsh-on-Mac-OSX.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to run Visual Studio Code from Zsh on Mac OSX 3 | categories: 4 | - Development 5 | permalink: how-to-run-visual-studio-code-from-zsh-on-mac-osx 6 | date: 2015-05-07 13:27:04 7 | --- 8 | 9 | **EDIT:** [You can just do this from Visual Studio Code now.](https://code.visualstudio.com/docs/setup/osx) 10 | 11 | Using [Visual Studio Code](https://code.visualstudio.com) on your Mac, but can't call it from Zsh? 12 | 13 | Using Terminal? [Go here](http://kevgriffin.com/how-to-run-visual-studio-code-from-terminal-on-mac-osx/) 14 | 15 | Currently, there isn't an automatic method for doing this, but with a little code in your `.zshrc` file, you can configure it. 16 | 17 | ``` 18 | function code { 19 | if [[ $# = 0 ]] 20 | then 21 | open -a "Visual Studio Code" 22 | else 23 | local argPath="$1" 24 | [[ $1 = /* ]] && argPath="$1" || argPath="$PWD/${1#./}" 25 | open -a "Visual Studio Code" "$argPath" 26 | fi 27 | } 28 | ``` 29 | Then from Terminal you can type: 30 | 31 | `code` -- opens Visual Studio Code 32 | `code .` -- opens current directory in Visual Studio Code 33 | `code somefile` -- opens somefile in Visual Studio Code -------------------------------------------------------------------------------- /source/speaking/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Speaking 3 | layout: generic 4 | date: 2017-04-25 23:05:20 5 | --- 6 | ## Looking for a speaker? 7 | I am always looking for new audiences to engage with. I commonly speak on a variety of topics, including (but not limited to): 8 | 9 | * ASP.NET 10 | * C# 11 | * JavaScript (Client and Server-side) 12 | * node.js 13 | * Microsoft Azure 14 | * Freelancing 15 | * Entreprenuership 16 | * and more! 17 | 18 | If your engagement is outside a five hour driving time of Chesapeake, VA, I humbly request some assistance with travel. As a fellow user group and conference organizer, I understand the limited funds for speakers but any assistance would be greatly appreciated. 19 | 20 | ## Talks 21 | 22 | * [Application Insights - The Magic School Bus For Your Web Applications](/talks/application-insights) 23 | 24 | ## Upcoming Speaking Engagements 25 | 26 | Nothing lined up at the moment! 27 | 28 | ## Previous Speaking Engagements 29 | 30 | | Date | Event | Talk Planned | 31 | |:----: |:-----: |:------------: | 32 | | May 23rd, 2017 | Capitial Area .NET Users Group |[Application Insights - The Magic School Bus For Your Web Applications](/talks/application-insights) | 33 | | | | | 34 | -------------------------------------------------------------------------------- /source/_posts/Quick-Introduction-to-SignalR-Streaming.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Quick Introduction to SignalR Streaming 3 | date: 2018-12-13 23:39:46 4 | categories: 5 | - ASP.NET Core 6 | permalink: quick-introduction-to-signalr-streaming 7 | tags: 8 | - asp.net core 9 | - signalr 10 | - websockets 11 | - streaming 12 | - .net core 13 | --- 14 | For my entry this year for [C# Advent](https://crosscuttingconcerns.com/The-Second-Annual-C-Advent), I wanted to do something a little bit different. 15 | 16 | As of late, I've been wanting to start doing several tidbits around cool things that I see in .NET Core and ASP.NET Core. And by the recommendation of my friend, [Brady Gaster](https://twitter.com/bradygaster), I took a look at the new Streaming APIs built into SignalR (for ASP.NET Core). 17 | 18 | And WOW! I'm super impressed with that I saw. 19 | 20 | Check out my video introduction below, and lemme know what you think in the comments! 21 | 22 | 23 | 24 | Source code for this project is available at on [GitHub](https://github.com/swiftkickin/signalr-streaming-v1). -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/js/jquery.countdown-hr.js: -------------------------------------------------------------------------------- 1 | /* http://keith-wood.name/countdown.html 2 | * Croatian l10n for the jQuery countdown plugin 3 | * Written by Dejan Broz info@hqfactory.com (2011) 4 | * Improved by zytzagoo (2014) */ 5 | (function($) { 6 | 'use strict'; 7 | $.countdown.regionalOptions.hr = { 8 | labels: ['Godina','Mjeseci','Tjedana','Dana','Sati','Minuta','Sekundi'], // plurals 9 | labels1: ['Godina','Mjesec','Tjedan','Dan','Sat','Minutu','Sekundu'], // singles 10 | labels2: ['Godine','Mjeseca','Tjedana','Dana','Sata','Minute','Sekunde'], // paucals 11 | compactLabels: ['g','m','t','d'], 12 | whichLabels: function(amount){ 13 | amount = parseInt(amount, 10); 14 | if (amount % 10 === 1 && amount % 100 !== 11) { 15 | return 1; // singles (/.*1$/ && ! /.*11$/) 16 | } 17 | if (amount % 10 >= 2 && amount % 10 <= 4 && (amount % 100 < 10 || amount % 100 >= 20)) { 18 | return 2; // paucals (/.*[234]$/ && ! /.*1[234]$/ 19 | } 20 | return 0; // default plural (most common case) 21 | }, 22 | digits: ['0','1','2','3','4','5','6','7','8','9'], 23 | timeSeparator: ':', 24 | isRTL: false 25 | }; 26 | $.countdown.setDefaults($.countdown.regionalOptions.hr); 27 | })(jQuery); 28 | -------------------------------------------------------------------------------- /source/_posts/How-to-run-Visual-Studio-Code-from-Terminal-on-Mac-OSX.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to run Visual Studio Code from Terminal on Mac OSX 3 | categories: 4 | - Development 5 | permalink: how-to-run-visual-studio-code-from-terminal-on-mac-osx 6 | date: 2015-05-07 13:20:28 7 | --- 8 | 9 | **Edit 06/24/2016:** [You can just do this from Visual Studio Code now.](https://code.visualstudio.com/docs/setup/osx) 10 | 11 | *Edit 12/10/2015: Thanks for commenter on letting know that latest release of Code broke original post. Updated with code from [documentation](https://code.visualstudio.com/Docs/editor/setup).* 12 | 13 | Using [Visual Studio Code](https://code.visualstudio.com) on your Mac, but you want to use it in Terminal? 14 | 15 | Using Zsh? [Go here](http://kevgriffin.com/how-to-run-visual-studio-code-from-zsh-on-mac-osx/) 16 | 17 | Currently, there isn't an automatic method for doing this, but with a little code in your `~/.bash_profile` file, you can configure it. 18 | 19 | ``` 20 | code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;} 21 | ``` 22 | 23 | Then from Terminal you can type: 24 | 25 | `code` -- opens Visual Studio Code 26 | `code .` -- opens current directory in Visual Studio Code 27 | `code somefile` -- opens somefile in Visual Studio Code -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/php/instagram/class-instagram.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | class TP_instagram { 14 | 15 | /** 16 | * API key 17 | * 18 | * @since 1.0.0 19 | * @access private 20 | * @var string $api_key Instagram API key 21 | */ 22 | private $api_key; 23 | 24 | /** 25 | * Initialize the class and set its properties. 26 | * 27 | * @since 1.0.0 28 | * @param string $api_key Instagram API key. 29 | */ 30 | public function __construct($api_key) { 31 | $this->api_key = $api_key; 32 | } 33 | 34 | /** 35 | * Get Instagram Pictures 36 | * 37 | * @since 1.0.0 38 | * @param string $user_id Instagram User id (not name) 39 | */ 40 | public function get_public_photos($search_user_id){ 41 | //call the API and decode the response 42 | $url = "https://api.instagram.com/v1/users/".$search_user_id."/media/recent?access_token=".$this->api_key."&client_id=".$search_user_id; 43 | $rsp = json_decode(file_get_contents($url)); 44 | return $rsp->data; 45 | } 46 | 47 | } 48 | ?> -------------------------------------------------------------------------------- /source/hire/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How Can I Help You? 3 | layout: generic 4 | date: 2014-02-20 22:47:10 5 | --- 6 | ## What Types of Work I'm Available For? 7 | 8 | I am available for a variety of engagement types. Pricing ranges thru Hourly Rates, Weekly Rates, and Monthly Retainers. 9 | 10 | ### One-on-One Coaching 11 | One of my favorite things to do is work individually with new developers, or developers who are trying to plus one their skillsets. In a coaching arrangement, you and I will meet on a regular basis (weekly in most cases). Together, we will developer a growth plan designed towards your goal. 12 | 13 | ### Private Training 14 | The speciality of my company, Swift Kick, is to provide customized software training to any teams that need a swift kick in the pants. 15 | 16 | ### Small Project Consulting 17 | For projects that require dedicated assistance ranging from 1 week to 3 months. If you fit into this category, or feel you do, 18 | 19 | ### Long-term Engagements 20 | Any project requiring more than 3 months of dedicated time. Please see Swift Kick for more information. 21 | 22 | ## How to Connect 23 | The quickest, easiest way to connect with me is to request a meeting through my [Clarity](https://clarity.fm/kevingriffin) account. Any requests through email or social media will be directed through this avenue. 24 | -------------------------------------------------------------------------------- /source/_posts/My-Defacto-gitignore-file.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My Defacto .gitignore file 3 | categories: 4 | - Development 5 | permalink: base-gitignore 6 | date: 2012-11-12 10:37:23 7 | --- 8 | 9 | Every time I create a new Git repo, I always have to go look for a previous copy of my .gitignore file.  I thought it would be a great idea to just post it up for all to find, in case they were looking for it.  This particular file is built around Visual Studio projects. 10 |
# Ignore file for Visual Studio
11 | 
12 | # use glob syntax
13 | syntax: glob
14 | 
15 | # Ignore Config files with keys and passwords
16 | #ServiceConfiguration*.cscfg
17 | #Web*.config
18 | #App*.config
19 | 
20 | # Ignore Visual Studio files
21 | *.obj
22 | #*.exe
23 | #*.pdb
24 | *.user
25 | *.aps
26 | *.pch
27 | *.vspscc
28 | *.vshost.*
29 | *_i.c
30 | *_p.c
31 | *.ncb
32 | *.suo
33 | *.tlb
34 | *.tlh
35 | *.bak
36 | *.cache
37 | *.ilk
38 | *.log
39 | *.lib
40 | *.sbr
41 | *.scc
42 | *.orig
43 | UpgradeLog*.*
44 | UpgradeReport*.*
45 | [Bb]in
46 | [Dd]ebug*/
47 | obj/
48 | [Rr]elease*/
49 | _ReSharper*/
50 | [Tt]est[Rr]esult*
51 | [Bb]uild[Ll]og.*
52 | *.[Pp]ublish.xml
53 | glob:*.vs10x
54 | *.ReSharper
55 | [Pp]ublish
56 | [Rr]eleaseFiles
57 | [Cc]sx/
58 | [Bb]ackup1/
59 | [Pp]ackages/
60 | 
61 | # Mac Files
62 | .DS_Store
63 | *.DS_Store
64 | ._*
-------------------------------------------------------------------------------- /source/_posts/Named-Callbacks-in-JavaScript.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Named Callbacks in JavaScript 3 | categories: 4 | - Development 5 | permalink: named-callbacks-in-javascript 6 | date: 2013-08-06 06:30:49 7 | --- 8 | 9 | You've been taught bad JavaScript for years and years.  What do I mean?  I'm sure you've written code like this more than once in your career: 10 |
someMethod(function (){
11 |      console.log("doing stuff...");
12 | });
13 | So what's wrong with that?  It runs and doesn't error.  Heck, even JSLint won't complain about it.  But what happens something goes wrong inside of your callback?  Most debuggers will list the callback as an "anonymous method" in the call stack.  Not very helpful is it?  Isn't there something simple we can do make our callbacks easier to read in a call stack? 14 | 15 | NAME YOUR CALLBACKS. 16 | 17 | Take the example above, and let's name the callback. 18 |
someMethod(function myCallback(){
19 |      console.log("doing stuff...");
20 | });
21 | Simple!  Let's imagine doing a jQuery AJAX call with this approach (and yes, I'm ignore the fact that you should use promises -- which are WAY better): 22 |
$.ajax({
23 |   url: "/myUrl",
24 |   success: function onAjaxSuccess (data){
25 |            },
26 |   error: function onAjaxError (error) {
27 |            }
28 | });
29 | You're welcome :) -------------------------------------------------------------------------------- /themes/griffin/layout/partials/styles.hbs: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /themes/griffin/source/js/custom.js: -------------------------------------------------------------------------------- 1 | /* Theme Name: The Project - Responsive Website Template 2 | * Author:HtmlCoder 3 | * Author URI:http://www.htmlcoder.me 4 | * Author e-mail:htmlcoder.me@gmail.com 5 | * Version:1.4.0 6 | * Created:March 2015 7 | * License URI:http://support.wrapbootstrap.com/ 8 | * File Description: Place here your custom scripts 9 | */ 10 | 11 | (function($){ 12 | $(document).ready(function(){ 13 | 14 | // Notify Plugin - The below code (until line 42) is used for demonstration purposes only 15 | //----------------------------------------------- 16 | if (($(".main-navigation.onclick").length>0) && !Modernizr.touch ){ 17 | $.notify({ 18 | // options 19 | message: 'The Dropdowns of the Main Menu, are now open with click on Parent Items. Click "Home" to checkout this behavior.' 20 | },{ 21 | // settings 22 | type: 'info', 23 | delay: 10000, 24 | offset : { 25 | y: 150, 26 | x: 20 27 | } 28 | }); 29 | }; 30 | if (!($(".main-navigation.animated").length>0) && !Modernizr.touch && $(".main-navigation").length>0){ 31 | $.notify({ 32 | // options 33 | message: 'The animations of main menu are disabled.' 34 | },{ 35 | // settings 36 | type: 'info', 37 | delay: 10000, 38 | offset : { 39 | y: 150, 40 | x: 20 41 | } 42 | }); // End Notify Plugin - The above code (from line 14) is used for demonstration purposes only 43 | 44 | }; 45 | }); // End document ready 46 | 47 | })(this.jQuery); 48 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.countdown/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jQuery Countdown 6 | 7 | 10 | 11 | 12 | 13 | 21 | 22 | 23 |

jQuery Countdown Basics

24 |

This page demonstrates the very basics of the 25 | jQuery Countdown plugin. 26 | It contains the minimum requirements for using the plugin and 27 | can be used as the basis for your own experimentation.

28 |

For more detail see the documentation reference page.

29 |

Counting down to 26 January 2014.

30 |
31 |
32 |
Github
https://github.com/kbwood/countdown
33 |
Bower
kbw-countdown
34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /source/_posts/swift-kick-show-unbelievable-and-complex-advancements-in-machine-learning-with-ankur-kalra.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Swift Kick Show - Unbelievable and Complex Advancements in Machine Learning with Ankur Kalra 3 | categories: 4 | - Swift Kick Show 5 | permalink: swift-kick-show-unbelievable-and-complex-advancements-in-machine-learning-with-ankur-kalra 6 | date: 2018-03-14 09:54:52 7 | --- 8 | 9 | On the March 14th episode of the Swift Kick Show, I was joined by my friend Ankur Kalra. I've known Ankur for many years as a member of a private bootstrapped business Slack group. He's been doing some really interesting work with Machine Learning - and I thought he'd be a great guest to have. 10 | 11 | Watch the video below, and check out the [Swift Kick YouTube channel](https://youtube.com/c/swiftkick). Like and subscribe for more great videos! 12 | 13 | ### Unbelievable and Complex Advancements in Machine Learning with Ankur Kalra 14 | 15 | >As a technologist, it's an exciting time to be alive. Recent publications have revealed truly unbelievable results in machine learning, some of which raise interesting and complex ethical questions. In this talk, Ankur will walk through some recent papers that are both technically impressive as well as ethically complex. Though this talk is geared towards people with some minimal technical background, no prior machine learning experience is necessary. 16 | 17 | -------------------------------------------------------------------------------- /source/_posts/Online-vs-Retail-Stores.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Online vs. Retail Stores 3 | categories: 4 | - Deep Thoughts 5 | permalink: online-vs-retail-stores 6 | date: 2010-04-19 06:00:00 7 | --- 8 | 9 | Something amazing happened the other day. 10 | 11 | I wanted to purchase a copy of Splinter Cell: Convinction.  After a little bit of surfing online, I discovered that Walmart had it on sale for $50 (compared to the regular $59.99).  So I drove up to the local Walmart, and walked over to the Video Games section.  Come to discover that the game was $59.99, instead of the $50 I saw online.  Come to discover, the $50 was an “online only price”. 12 | 13 | As any good consumer would do, I pulled out my Android phone and started the Amazon app.  Splinter Cell: Conviction was available for $50, and also eligible for free shipping.  Click… click… and I was finished ordering the game… on my phone… while staring at the game in the cabinet.  So instead of giving Walmart my money, I gave it to Amazon.  I was even willing to pay tax to walk out of the store with it right then and there. 14 | 15 | There are drawbacks to online stores.  I do have to wait several days for my order, and sometimes that’s not acceptable.  However, when you run an online store along side a brick and mortar, you should be trying to compete more with other online retailers.  “Online only” prices are idiotic, and will only convince me to go to another retailer.  If you advertise a price online, I should be able to go to store and pick up the same item for the same price. 16 | 17 | Good job Walmart.  Ask Amazon how they enjoy my money. -------------------------------------------------------------------------------- /source/talks/application-insights/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Application Insights - The Magic School Bus for Your Web Applications 3 | layout: generic 4 | category: 5 | - Talks 6 | date: 2017-06-06 00:00:00 7 | --- 8 | 9 | ## Abstract 10 | [Read On GitHub](https://github.com/1kevgriff/PresentationAbstracts/blob/master/Application%20Insights%20-%20The%20Magic%20School%20Bus%20for%20your%20Web%20Applications.md) 11 | Ms. Frizzle and the kids are going on an adventure. Not into the human body. Not into outer space. 12 | 13 | The Magic School Bus is going into your web applications to answer the questions that have been plaguing developers for centuries. How fast are my requests? How many requests am I getting per second? What resources are people asking for? What's throwing errors? 14 | 15 | Application Insights is an application performance service for web developers. It works across multiple platforms, including .NET, Node.JS, and more. It is designed to watch your applications at the granular level, and report back everything it sees. All this while not impacting your performance. 16 | 17 | In this presentation, we will explore adding Application Insights to an existing web application and looking through its cloud-based portal at overview health and performance. Examples from existing production applications will be used to show off many of the features and cool things you can do! 18 | 19 | ## Slides 20 | Download the slides for this talk [via my Dropbox](https://www.dropbox.com/s/9nvwa3t2j0h1m6r/Application%20Insights%20-%20The%20Magic%20School%20Bus%20for%20your%20Web%20Applications.pptx?dl=0) -------------------------------------------------------------------------------- /source/_posts/No-matter-what-you-do-add-value.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'No matter what you do: add value' 3 | categories: 4 | - Deep Thoughts 5 | permalink: no-matter-what-you-do-add-value 6 | date: 2015-05-14 11:38:29 7 | --- 8 | 9 | Yesterday I had the pleasure of chatting with a gentleman about a potential mentoring gig. The way I like to approach these sort of talks is to determine high level goals. In this case, the client was looking for someone to be a set of expert eyes on a codebase. He is certainly a capable developer, but he's also aware enough to know when he has hit a roadblock. 10 | 11 | We were connected by the work and training I've done with SignalR and ASP.NET, which would prove especially useful in this situation. 12 | 13 | The client discussed the issues he was running into and the thoughts he had around solutions. Normally, this is where you will have the instinct to want to hold off providing guidance. You're the expert. This what people should be paying you for! 14 | 15 | > Always try to add some value. 16 | 17 | That's not how I reacted though. Instead, I spent 10 minute giving my potential-client two or three *free* tips and tricks on what he should explore. Sometimes the simplest tip is all a person needs to push forward. 18 | 19 | The underlying point is that no matter what you do, **always try to add some value**. If my tips bring him to an epiphany, then I have automatically reaffirmed that I am an expert. This could lead to mentoring and other potential work. It could lead to referrals. 20 | 21 | Approach all your interactions as a chance to provide value to someone. It will pay back dividends! -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/owl.theme.green.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.0 3 | * Copyright 2013-2016 David Deutsch 4 | * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 5 | */ 6 | /* 7 | * Green theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #4DC7A0; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #4DC7A0; } 51 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/owlcarousel2/assets/owl.theme.default.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.0 3 | * Copyright 2013-2016 David Deutsch 4 | * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 5 | */ 6 | /* 7 | * Default theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #869791; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #869791; } 51 | -------------------------------------------------------------------------------- /source/_posts/MongoDB-Setting-TTL-on-Documents.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'MongoDB: Setting TTL on Documents' 3 | permalink: mongodb-setting-ttl-on-documents 4 | date: 2014-10-13 14:08:05 5 | categories: 6 | - Development 7 | --- 8 | 9 | On some recent work I was doing with [Winsitter](http://winsitter.com), I needed an approach that would systematically remove documents after a specified period of time within MongoDB. 10 | 11 | Previously, I would have written cron jobs or helpers to clean up the old data. No longer! 12 | 13 | Come to discover, this feature [already exists](http://docs.mongodb.org/manual/tutorial/expire-data/) inside of MongoDB. It is called setting the TTL or Time to Live of a document. 14 | 15 | The process involves creating an index on the date object you'd like to watch. In the example below, I am providing a property on my document called `auditDate`. I want the document associated with that property to automatically remove itself after 5 days or *432000000* miliseconds. 16 | 17 | ``` 18 | dbConnection 19 | .collection("audit") 20 | .ensureIndex({ 21 | "auditDate": 1 22 | }, { 23 | expireAfterSeconds: 432000000 // 5 days 24 | }, function(indexErr) { 25 | if (indexErr) { 26 | console.log("error creating index"); 27 | console.log(indexErr); 28 | } 29 | }); 30 | ``` 31 | 32 | In the example, I'm using the MongoDB node.js library to ensure an index exists. If the index doesn't exist, MongoDB will create it. 33 | 34 | The `expireAfterSeconds` options tells MongoDB that after a specified amount of time, the document should automatically remove itself. 35 | 36 | This quick fix has saved me a ton of time, and I am hoping it saves a ton for you too! -------------------------------------------------------------------------------- /source/_posts/Preloading-Multiple-Audio-Tags-in-Internet-Explorer-9.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Preloading Multiple Audio Tags in Internet Explorer 9 3 | categories: 4 | - Development 5 | permalink: preloading-multiple-audio-tags-in-internet-explorer-9 6 | date: 2012-11-02 06:00:59 7 | --- 8 | 9 | I had a unique problem.  I have an app I'm working on where I needed to preload about 50 audio files for use during the page's lifetime.  If you're up on your HTML5-fu, this is a simple task: 10 | 11 |
12 | <audio id="myAudio" controls preload="auto">
13 |      <source src="/my-podcast.mp3" />
14 |      <source src="/my-podcast.ogg" />
15 | </audio>
16 | 
17 | 18 | In Chrome, this works PERFECTLY (as it should). 19 | 20 | In Internet Explorer, several (if not all) files will fail to preload.  Here's how to figure it: 21 | 22 |
23 | var audioElement = document.getElementById("myAudio");
24 | console.log(audioElement.networkState);
25 | 
26 | 27 | Network state can have 3 options: NETWORK_EMPTY, NETWORK_IDLE, NETWORK_LOADING, NETWORK_NO_SOURCE. 28 | 29 | You "want" it to be IDLE, because that means the file is loaded.  Typically, you'll get NO_SOURCE with Internet Explorer. 30 | 31 | What's a quick fix?  First, make sure there is no preload attribute, and then do this: 32 | 33 |
34 | var audioElement = document.getElementById("myAudio");
35 | audioElement.load(); // kicks off the load
36 | 
37 | 38 | This has worked for me in 100% of the tests I've done tonight.  Feel free to comment on other solutions.  I haven't tested in IE10 yet, so I cannot be certain of how it works. -------------------------------------------------------------------------------- /source/_posts/Review-7-Recurring-Revenue-Recipes-for-Freelancers.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Review: 7 Recurring Revenue Recipes for Freelancers' 3 | permalink: review-7-recurring-revenue-recipes-for-freelancers 4 | categories: 5 | - Reviews 6 | updated: '2015-02-16 09:11:50' 7 | date: 2015-02-16 08:55:19 8 | --- 9 | 10 | During a flight from Norfok to Charlotte, I had the opportunity to read [Ryan Castillo's](https://twitter.com/rmcastil) new book [7 Recurring Revenue Recipes for Freelancers](http://ryancastillo.org/7-recipes-recurring-revenue/). 11 | 12 | In this book, Ryan provides seven actionable sets of guidelines that provides the reader a path way to earning $150k a year. Ryan allows the reader to take a "choose your own adventure" to their career and bottom line. 13 | 14 | This book provides clear ways for readers who are already experienced freelancers or consultants to move their target forward. If you're new to the consulting game, Ryan also provides some great places to get started. 15 | 16 | Ryan's recipe on developing support contracts with new and existing clients definitely struck a cord with me. This is a problem I'm running into now with multiple clients, and I'm going to be able to put Ryan's suggestions into action within the next week. This book has the potential to make me an easy $25k extra each year. 17 | 18 | Many of the recommendations Ryan makes echo throughout the communities I'm involved in daily. Every day, people are putting these recipes into action and are seeing results! 19 | 20 | Ryan is currently [pre-selling his book for $12](http://ryancastillo.org/7-recipes-recurring-revenue/), which is a drop in the bucket compared to what you will make if you put his receipes into adction. -------------------------------------------------------------------------------- /source/_posts/Console-Games-Why-do-we-have-to-press-start.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Console Games: Why do we have to press start?' 3 | permalink: console-games-why-do-we-have-to-press-start 4 | categories: 5 | - "Development - Game Development" 6 | date: 2010-01-05 06:00:00 7 | --- 8 | 9 |

Interesting question came up on Twitter the other day:

“Press Start” screens?  Why can’t I just go straight to the main menu?

If you’re a gamer, especially on consoles, you’ve seen this screen more often than you’d care to.  It’s a little annoyance.  However, there is a very good reason for having this screen in place.

Imagine you’re running four controller on your Xbox, and all four of them are turned on.  Then you put in a single player game, and it comes up to that annoying “Press Start” screen.  Which controller do you use to press start with?  The answer is easy: any of them!

The “Press Start” screen is designed to determine which controller the game should poll for input.  During this screen, the game is polling all connected controllers for input.  If any of them register a “start” button push, the game makes that controller the “default” controller.  The use-case for this scenario is that the player should be able to use any connected controller to play the game, and not be forced to use controller #1.  This is considered a best practice.

The More You Know

-------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/navigation-skins/custom.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------------- 2 | 3 | - Revolution Slider 5.0 Navigatin Skin Style - 4 | 5 | CUSTOM SKIN 6 | 7 | author: ThemePunch 8 | email: info@themepunch.com 9 | website: http://www.themepunch.com 10 | -----------------------------------------------------------------------------*/ 11 | /* ARROWS */ 12 | .custom.tparrows { 13 | cursor:pointer; 14 | background:#000; 15 | background:rgba(0,0,0,0.5); 16 | width:40px; 17 | height:40px; 18 | position:absolute; 19 | display:block; 20 | z-index:100; 21 | } 22 | .custom.tparrows:hover { 23 | background:#000; 24 | } 25 | .custom.tparrows:before { 26 | font-family: "revicons"; 27 | font-size:15px; 28 | color:#fff; 29 | display:block; 30 | line-height: 40px; 31 | text-align: center; 32 | } 33 | .custom.tparrows.tp-leftarrow:before { 34 | content: "\e824"; 35 | } 36 | .custom.tparrows.tp-rightarrow:before { 37 | content: "\e825"; 38 | } 39 | 40 | 41 | 42 | /* BULLETS */ 43 | .custom.tp-bullets { 44 | } 45 | .custom.tp-bullets:before { 46 | content:" "; 47 | position:absolute; 48 | width:100%; 49 | height:100%; 50 | background:transparent; 51 | padding:10px; 52 | margin-left:-10px;margin-top:-10px; 53 | box-sizing:content-box; 54 | } 55 | .custom .tp-bullet { 56 | width:12px; 57 | height:12px; 58 | position:absolute; 59 | background:#aaa; 60 | background:rgba(125,125,125,0.5); 61 | cursor: pointer; 62 | box-sizing:content-box; 63 | } 64 | .custom .tp-bullet:hover, 65 | .custom .tp-bullet.selected { 66 | background:rgb(125,125,125); 67 | } 68 | .custom .tp-bullet-image { 69 | } 70 | .custom .tp-bullet-title { 71 | } 72 | 73 | 74 | /* THUMBS */ 75 | 76 | 77 | /* TABS */ 78 | 79 | 80 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/navigation-skins/persephone.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------------- 2 | 3 | - Revolution Slider 5.0 Navigatin Skin Style - 4 | 5 | PERSEPHONE SKIN 6 | 7 | author: ThemePunch 8 | email: info@themepunch.com 9 | website: http://www.themepunch.com 10 | -----------------------------------------------------------------------------*/ 11 | /* ARROWS */ 12 | .persephone.tparrows { 13 | cursor:pointer; 14 | background:#aaa; 15 | background:rgba(200,200,200,0.5); 16 | width:40px; 17 | height:40px; 18 | position:absolute; 19 | display:block; 20 | z-index:100; 21 | border:1px solid #f5f5f5; 22 | } 23 | .persephone.tparrows:hover { 24 | background:#333; 25 | } 26 | .persephone.tparrows:before { 27 | font-family: "revicons"; 28 | font-size:15px; 29 | color:#fff; 30 | display:block; 31 | line-height: 40px; 32 | text-align: center; 33 | } 34 | .persephone.tparrows.tp-leftarrow:before { 35 | content: "\e824"; 36 | } 37 | .persephone.tparrows.tp-rightarrow:before { 38 | content: "\e825"; 39 | } 40 | 41 | 42 | 43 | /* BULLETS */ 44 | .persephone.tp-bullets { 45 | } 46 | .persephone.tp-bullets:before { 47 | content:" "; 48 | position:absolute; 49 | width:100%; 50 | height:100%; 51 | background:#transparent; 52 | padding:10px; 53 | margin-left:-10px;margin-top:-10px; 54 | box-sizing:content-box; 55 | } 56 | .persephone .tp-bullet { 57 | width:12px; 58 | height:12px; 59 | position:absolute; 60 | background:#aaa; 61 | border:1px solid #e5e5e5; 62 | cursor: pointer; 63 | box-sizing:content-box; 64 | } 65 | .persephone .tp-bullet:hover, 66 | .persephone .tp-bullet.selected { 67 | background:#222; 68 | } 69 | .persephone .tp-bullet-image { 70 | } 71 | .persephone .tp-bullet-title { 72 | } 73 | 74 | 75 | -------------------------------------------------------------------------------- /themes/griffin/helper/index.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash'); 2 | 3 | module.exports = function (hexo) { 4 | return { 5 | out: function (obj) { 6 | console.log(JSON.stringify(obj)); 7 | return; 8 | }, 9 | ifequals: function (conditional, value, options) { 10 | 11 | console.log("Comparing"); 12 | 13 | if (conditional === value) { 14 | return options.fn(this); 15 | } else { 16 | return options.inverse(this); 17 | } 18 | 19 | }, 20 | sortByKey: function (array, key) { 21 | /** 22 | * Sorts array by a given key 23 | * @function sort_by_key 24 | * @memberof Handlebars.helpers 25 | * @param {array} array - The data to sort. 26 | * @param {string} key - The key to sort by. 27 | * @see {@link http://stackoverflow.com/questions/8175093/simple-function-to-sort-an-array-of-objects} 28 | * @returns {array} 29 | */ 30 | return _.sortBy(array, [key]); 31 | }, 32 | filterCategories: function (array, name) { 33 | var results = _.filter(array, function (el) { 34 | var res = el.categories.find({ name: name }); 35 | 36 | if (res.length > 0) { 37 | return el; 38 | } 39 | }); 40 | 41 | return _.sortBy(results, ["date"]).reverse(); 42 | }, 43 | showCategory: function (categories) { 44 | var cats = []; 45 | if (categories) { 46 | categories.data.forEach(function (element) { 47 | cats.push(element.name); 48 | }, this); 49 | } 50 | 51 | if (cats.length === 0) { 52 | result = "Uncategorized"; 53 | } else { 54 | result = cats.join(", "); 55 | } 56 | 57 | return result; 58 | }, 59 | page_url: function (path, options){ 60 | return this.url_for(path, options).replace(/index\.html$/, ''); 61 | } 62 | }; 63 | }; -------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /source/_posts/Moving-on-to-Greener-Pastures.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Moving on to Greener Pastures 3 | categories: 4 | - Deep Thoughts 5 | permalink: moving-on-to-greener-pastures 6 | date: 2011-05-25 06:00:00 7 | --- 8 | 9 |

After four years with my current company, Antech Systems, it is time for me to pack up and move on to greener pastures. 

I would like to publically thank Antech for providing me with a foundation to build my career off of.  I came to Antech as a college newbie, recently laid off from Symantec, with no .NET experience of any kind.  Within weeks, I was able to grow into a position where I was not only functional, but able to provide meaningful feedback about the applications being built and the processes use to build them.  Antech was the reason I found the developer community, and was one of the leading reasons why I started the Hampton Roads .NET Users Group.  Without them, I have no idea where I would be right now.

I’m pleased to announce that on June 1st, 2011, I’ll be starting my new position with ComponentOne as a Technical Evangelist. 

In this position, I’ll be working closely with Rich Dudley to help promote ComponentOne in the developer community.  As a Technical Evangelist, it is my goal to help you all in your communities in anyway possible.  Please feel free to use me as a resource.

If you’re going to be in the Kansas City area on June 25th, come out to the Kansas City Developer Conference to see me!  I’ll be talking about MVVM!  If you’re in the area, you should definitely come out.

-------------------------------------------------------------------------------- /themes/griffin/source/fonts/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/navigation-skins/hephaistos.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------------- 2 | 3 | - Revolution Slider 5.0 Navigatin Skin Style - 4 | 5 | HEPHAISTOS SKIN 6 | 7 | author: ThemePunch 8 | email: info@themepunch.com 9 | website: http://www.themepunch.com 10 | -----------------------------------------------------------------------------*/ 11 | /* ARROWS */ 12 | .hephaistos.tparrows { 13 | cursor:pointer; 14 | background:#000; 15 | background:rgba(0,0,0,0.5); 16 | width:40px; 17 | height:40px; 18 | position:absolute; 19 | display:block; 20 | z-index:100; 21 | border-radius:50%; 22 | } 23 | .hephaistos.tparrows:hover { 24 | background:#000; 25 | } 26 | .hephaistos.tparrows:before { 27 | font-family: "revicons"; 28 | font-size:18px; 29 | color:#fff; 30 | display:block; 31 | line-height: 40px; 32 | text-align: center; 33 | } 34 | .hephaistos.tparrows.tp-leftarrow:before { 35 | content: "\e82c"; 36 | margin-left:-2px; 37 | 38 | } 39 | .hephaistos.tparrows.tp-rightarrow:before { 40 | content: "\e82d"; 41 | margin-right:-2px; 42 | } 43 | 44 | 45 | 46 | /* BULLETS */ 47 | .hephaistos.tp-bullets { 48 | } 49 | .hephaistos.tp-bullets:before { 50 | content:" "; 51 | position:absolute; 52 | width:100%; 53 | height:100%; 54 | background:transparent; 55 | padding:10px; 56 | margin-left:-10px;margin-top:-10px; 57 | box-sizing:content-box; 58 | } 59 | .hephaistos .tp-bullet { 60 | width:12px; 61 | height:12px; 62 | position:absolute; 63 | background:#999; 64 | border:3px solid #f5f5f5; 65 | border-radius:50%; 66 | cursor: pointer; 67 | box-sizing:content-box; 68 | box-shadow: 0px 0px 2px 1px rgba(130,130,130, 0.3); 69 | 70 | } 71 | .hephaistos .tp-bullet:hover, 72 | .hephaistos .tp-bullet.selected { 73 | background:#fff; 74 | border-color:#000; 75 | } 76 | .hephaistos .tp-bullet-image { 77 | } 78 | .hephaistos .tp-bullet-title { 79 | } 80 | 81 | 82 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/css/navigation-skins/uranus.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------------- 2 | 3 | - Revolution Slider 5.0 Navigatin Skin Style - 4 | 5 | URANUS SKIN 6 | 7 | author: ThemePunch 8 | email: info@themepunch.com 9 | website: http://www.themepunch.com 10 | -----------------------------------------------------------------------------*/ 11 | /* ARROWS */ 12 | .uranus.tparrows { 13 | width:50px; 14 | height:50px; 15 | background:transparent; 16 | } 17 | .uranus.tparrows:before { 18 | width:50px; 19 | height:50px; 20 | line-height:50px; 21 | font-size:40px; 22 | transition:all 0.3s; 23 | -webkit-transition:all 0.3s; 24 | } 25 | 26 | .uranus.tparrows:hover:before { 27 | opacity:0.75; 28 | } 29 | 30 | /* BULLETS */ 31 | .uranus .tp-bullet{ 32 | border-radius: 50%; 33 | box-shadow: 0 0 0 2px rgba(255, 255, 255, 0); 34 | -webkit-transition: box-shadow 0.3s ease; 35 | transition: box-shadow 0.3s ease; 36 | background:transparent; 37 | } 38 | .uranus .tp-bullet.selected, 39 | .uranus .tp-bullet:hover { 40 | box-shadow: 0 0 0 2px #FFF; 41 | border:none; 42 | border-radius: 50%; 43 | 44 | background:transparent; 45 | } 46 | 47 | 48 | 49 | .uranus .tp-bullet-inner { 50 | background-color: rgba(255, 255, 255, 0.7); 51 | -webkit-transition: background-color 0.3s ease, -webkit-transform 0.3s ease; 52 | transition: background-color 0.3s ease, transform 0.3s ease; 53 | top: 0; 54 | left: 0; 55 | width: 100%; 56 | height: 100%; 57 | outline: none; 58 | border-radius: 50%; 59 | background-color: #FFF; 60 | background-color: rgba(255, 255, 255, 0.3); 61 | text-indent: -999em; 62 | cursor: pointer; 63 | position: absolute; 64 | } 65 | 66 | .uranus .tp-bullet.selected .tp-bullet-inner, 67 | .uranus .tp-bullet:hover .tp-bullet-inner{ 68 | transform: scale(0.4); 69 | -webkit-transform: scale(0.4); 70 | background-color:#fff; 71 | } 72 | 73 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/jquery.parallax-1.1.3.js: -------------------------------------------------------------------------------- 1 | /* 2 | Plugin: jQuery Parallax 3 | Version 1.1.3 4 | Author: Ian Lunn 5 | Twitter: @IanLunn 6 | Author URL: http://www.ianlunn.co.uk/ 7 | Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/ 8 | 9 | Dual licensed under the MIT and GPL licenses: 10 | http://www.opensource.org/licenses/mit-license.php 11 | http://www.gnu.org/licenses/gpl.html 12 | */ 13 | 14 | (function( $ ){ 15 | var $window = $(window); 16 | var windowHeight = $window.height(); 17 | 18 | $window.resize(function () { 19 | windowHeight = $window.height(); 20 | }); 21 | 22 | $.fn.parallax = function(xpos, speedFactor, outerHeight) { 23 | var $this = $(this); 24 | var getHeight; 25 | var firstTop; 26 | var paddingTop = 0; 27 | 28 | //get the starting position of each element to have parallax applied to it 29 | $this.each(function(){ 30 | firstTop = $this.offset().top; 31 | }); 32 | 33 | if (outerHeight) { 34 | getHeight = function(jqo) { 35 | return jqo.outerHeight(true); 36 | }; 37 | } else { 38 | getHeight = function(jqo) { 39 | return jqo.height(); 40 | }; 41 | } 42 | 43 | // setup defaults if arguments aren't specified 44 | if (arguments.length < 1 || xpos === null) xpos = "50%"; 45 | if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1; 46 | if (arguments.length < 3 || outerHeight === null) outerHeight = true; 47 | 48 | // function to be called whenever the window is scrolled or resized 49 | function update(){ 50 | var pos = $window.scrollTop(); 51 | 52 | $this.each(function(){ 53 | var $element = $(this); 54 | var top = $element.offset().top; 55 | var height = getHeight($element); 56 | 57 | // Check if totally above or totally below viewport 58 | if (top + height < pos || top > pos + windowHeight) { 59 | return; 60 | } 61 | 62 | $this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px"); 63 | }); 64 | } 65 | 66 | $window.bind('scroll', update).resize(update); 67 | update(); 68 | }; 69 | })(jQuery); -------------------------------------------------------------------------------- /source/_posts/Managing-Your-User-Group-Calendar-Roulette.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Managing Your User Group: Calendar Roulette' 3 | permalink: calendar-roulette 4 | categories: 5 | - Community, User Groups, and Conferences 6 | date: 2015-03-06 22:39:16 7 | --- 8 | 9 | One trait of successful user groups is don't play calendar roulette. Meaning: they chose a time or day each month to hold the group meeting. 10 | 11 | > We meet every 2nd Tuesday. 12 | 13 | or 14 | 15 | > We are the last Thursday of the month. 16 | 17 | Why is this important? 18 | ***You want your members to be able to determine meeting dates based off a quick glance of a calendar.*** 19 | Consistency is key. If your meetings are in different venues or different days of the month, you're chancing that someone will forget and not be in attendance. 20 | 21 | **What's a good night for meetings?** 22 | With the Hampton Roads .NET Users Group, I chose the 2nd Tuesday of the month. Why? Because I felt Tuesdays were a better for my schedule. Only once in a 5 year period did I change the meeting. 23 | 24 | My recommendation is to choose a Tuesday, Wednesday, or Thursday. Mondays are bad for folks because it's the first day back to work after a short weekend. Fridays are bad because, dude, it's the weekend. PARTY TIME. 25 | 26 | Be careful with Wednesdays as well. Many church functions occur on Wednesday nights, and that might be limiting a percentage of your population. 27 | 28 | **When is it okay to move the meeting?** 29 | Let's imagine you have a speaker coming into town that's "a big deal". But they're only able to meeting on Wednesday night, and your meetings are Tuesdays. MOVE THE MEETING. Make sure the change is well communicated, and that it's temporary. You might lose attendance that month, but people are adaptable. Just don't make it a habit. 30 | 31 | **Conclusion** 32 | Keep scheduling simple. Hampton Roads .NET members knew where to go and when to be there every month of the year. If you build a level of consistency, you're going to have people showing up out of habit, and that's a recipe for a successful group. 33 | 34 | 35 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/php/vimeo/class-vimeo.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | class TP_vimeo { 14 | /** 15 | * Stream Array 16 | * 17 | * @since 1.0.0 18 | * @access private 19 | * @var array $stream Stream Data Array 20 | */ 21 | private $stream; 22 | 23 | /** 24 | * Get Vimeo User Videos 25 | * 26 | * @since 1.0.0 27 | */ 28 | public function get_vimeo_videos($type,$value){ 29 | //call the API and decode the response 30 | if($type=="user"){ 31 | $url = "https://vimeo.com/api/v2/".$value."/videos.json"; 32 | } 33 | else{ 34 | $url = "https://vimeo.com/api/v2/".$type."/".$value."/videos.json"; 35 | } 36 | 37 | $rsp = json_decode(file_get_contents($url)); 38 | 39 | return $rsp; 40 | } 41 | 42 | /** 43 | * Prepare output array $stream for Vimeo videos 44 | * 45 | * @since 1.0.0 46 | * @param string $videos Vimeo Output Data 47 | */ 48 | private function vimeo_output_array($videos,$count){ 49 | foreach ($videos as $video) { 50 | if($count-- == 0) break; 51 | 52 | $stream = array(); 53 | 54 | $image_url = @array( 55 | 'thumbnail_small' => array($video->thumbnail_small), 56 | 'thumbnail_medium' => array($video->thumbnail_medium), 57 | 'thumbnail_large' => array($video->thumbnail_large), 58 | ); 59 | 60 | $stream['custom-image-url'] = $image_url; //image for entry 61 | $stream['custom-type'] = 'vimeo'; //image, vimeo, youtube, soundcloud, html 62 | $stream['custom-vimeo'] = $video->id; 63 | $stream['post_url'] = $video->url; 64 | $stream['post_link'] = $video->url; 65 | $stream['title'] = $video->title; 66 | $stream['content'] = $video->description; 67 | $stream['date_modified'] = $video->upload_date; 68 | $stream['author_name'] = $video->user_name; 69 | 70 | $this->stream[] = $stream; 71 | } 72 | } 73 | } 74 | ?> -------------------------------------------------------------------------------- /source/newsletter/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Personal Friends of Griff 3 | permalink: newsletter 4 | updated: '2014-08-04 10:52:34' 5 | date: 2014-08-04 10:05:06 6 | --- 7 | 8 | Hey there Friend! From time to time I like to produce content that would be relevant to you. Sign up for my newsletter today, and get that content sent directly to your inbox! 9 | 10 | I promise to send no more than one email per week! 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 | 21 | 24 | 25 | 26 | 29 | 32 | 33 | 34 | 35 | 38 | 41 | 42 |
19 | 20 | 22 | 23 |
27 | 28 | 30 | 31 |
36 | 37 | 39 | 40 |
43 | 44 |
45 | 46 | 47 |
48 |
49 |
50 |
51 |
52 | 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/node,hexo,visualstudiocode 3 | # Edit at https://www.gitignore.io/?templates=node,hexo,visualstudiocode 4 | 5 | ### Hexo ### 6 | db.json 7 | .deploy_git 8 | public/ 9 | 10 | ### Node ### 11 | # Logs 12 | logs 13 | *.log 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | 18 | # Runtime data 19 | pids 20 | *.pid 21 | *.seed 22 | *.pid.lock 23 | 24 | # Directory for instrumented libs generated by jscoverage/JSCover 25 | lib-cov 26 | 27 | # Coverage directory used by tools like istanbul 28 | coverage 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # TypeScript v1 declaration files 50 | typings/ 51 | 52 | # Optional npm cache directory 53 | .npm 54 | 55 | # Optional eslint cache 56 | .eslintcache 57 | 58 | # Optional REPL history 59 | .node_repl_history 60 | 61 | # Output of 'npm pack' 62 | *.tgz 63 | 64 | # Yarn Integrity file 65 | .yarn-integrity 66 | 67 | # dotenv environment variables file 68 | .env 69 | 70 | # parcel-bundler cache (https://parceljs.org/) 71 | .cache 72 | 73 | # next.js build output 74 | .next 75 | 76 | # nuxt.js build output 77 | .nuxt 78 | 79 | # vuepress build output 80 | .vuepress/dist 81 | 82 | # Serverless directories 83 | .serverless/ 84 | 85 | # FuseBox cache 86 | .fusebox/ 87 | 88 | #DynamoDB Local files 89 | .dynamodb/ 90 | 91 | ### VisualStudioCode ### 92 | .vscode/* 93 | !.vscode/settings.json 94 | !.vscode/tasks.json 95 | !.vscode/launch.json 96 | !.vscode/extensions.json 97 | 98 | ### VisualStudioCode Patch ### 99 | # Ignore all local history of files 100 | .history 101 | 102 | # End of https://www.gitignore.io/api/node,hexo,visualstudiocode -------------------------------------------------------------------------------- /source/_posts/The-10-Rule-to-Presentations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The 10% Rule to Presentations 3 | categories: 4 | - Deep Thoughts 5 | permalink: the-10-rule-to-presentations 6 | date: 2016-03-24 09:18:59 7 | --- 8 | 9 | When mentoring new technical speakers, I like to cite what I call "the 10% rule". 10 | 11 | Think about it like this: If you are presenting on a 100-level topics (for example, "Intro to Angular" or "Building Your First App with Elixir"), you can safely assume that your audience is one of three types people. 12 | 13 | **First**, they are an absolute newbie who is there because they heard about this technology but have practically no experience with it. 14 | 15 | **Second**, they have been to previous talks on the subject or have read a couple tutorials. They are not starting at "ground-zero", but they are darn close. 16 | 17 | **Third**, they are seasoned or beyond 100-level, and they are looking to see if you offer new perspective. 18 | 19 | The 10% rule applies to the first two groups. Your job as the presenter is to try to leave the audience with 10% of the knowledge you have on a subject. 20 | 21 | Ten percent sound like a lot, right? Doesn't have to be. For most developers, this is seeing how pieces lay together or how do you do something from scratch. 22 | 23 | Ten percent might simply be "what problem does the thing I'm showing you solve?" 24 | 25 | My first set of presentations were around jQuery (2007 era). My intro talks discussed manipulating the DOM and listening for events. I'd discuss the "hard" way, but then showed how easy jQuery made it. 26 | 27 | If you're adventuring into 200 or 300-level talks, the same 10% rule can apply. Imagine you want to do a talk on "new C# features". Your expectation is that the audience is familiar with C#. Your 10% is going to be a simple list of what is new, with basic explanations. 28 | 29 | If the attendee goes home and runs into a scenario where a new feature would be useful, you have provided them with the foundation to research more. 30 | 31 | The 10% rule is meant to build foundations for learning. Expose audiences to ideas and concepts, and guide them towards better self-learning. -------------------------------------------------------------------------------- /source/_posts/Managing-Your-User-Group-Food.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Managing Your User Group: Food' 3 | categories: 4 | - Community, User Groups, and Conferences 5 | permalink: user-group-food 6 | date: 2015-10-13 18:45:40 7 | --- 8 | 9 | *Edit: Based off some comments, I've included options for non-lovers of meat. Also added other comments.* 10 | 11 | For a lot of user groups, food depends highly on the sponsor for the month. 12 | 13 | Let's keep this short and sweet: Sponsors. If your instinct is to order pizza for a user group meeting, your attendees already hate you. 14 | 15 | Think about it this way. A lot of people have an opportunity to sponsor a group. You want to be memorable. Pizza is not memorable. 16 | 17 | And you know what else? Sandwiches. This is the new pizza. If you think you're being clever and different by providing Jimmy Johns instead of pizza, your attendees hate you too. 18 | 19 | What could you do instead of pizza? What food would make your company memorable? Here are some ideas: 20 | 21 | **Chipotle** - When I spoke at Richmond .NET in October 2015, MaconIT brought Chiptole burritos. I'm talking about a *box of freakin burritos*. 22 | 23 | **Taco Bar** - Taco bars are fun, and they allow attendees to choose their own mexican adventure. 24 | 25 | **Chick-Fil-A** - Nugget tray. Enough said. 26 | 27 | **PF Changs** - How about some asian flair? Try a mini-buffet of PF Changs favorites. 28 | 29 | **BBQ Buffet** - Pulled pork, beans, coleslaw. Depending on the location, you can get a BBQ buffet for the same price as pizza for a group. 30 | 31 | **Veggie/Vegan Options** - I know, I know. The food above is all mostly of the animal protein category. Please don't forget people that don't eat meat. Salad choices and veggies go a long way. You'd be really surprised how many card-carrying meat eaters will dive into healthy choices. Not sure what Vegan's would eat? Ask one. They'd be more than happy to give you a couple dozen options. 32 | 33 | Don't get me wrong, pizza is awesome. Pizza in EXCESS is horrible (and to be fair, if you brought Chick-Fil-A every meeting -- that would probably get old too). Be good to your groups and don't buy pizza (or sandwiches). Look for creative alternatives. Attendees will love you. -------------------------------------------------------------------------------- /themes/griffin/source/fonts/fontello/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /source/_posts/swift-kick-show-nosql-shouldnt-mean-nosecurity-with-matt-groves.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Swift Kick Show - NoSql Shouldn't Mean NoSecurity with Matt Groves 3 | categories: 4 | - Swift Kick Show 5 | permalink: swift-kick-show-nosql-shouldnt-mean-nosecurity-with-matt-groves 6 | date: 2018-04-24 09:54:52 7 | --- 8 | 9 | On the April 18th "Swift Kick Show", I had the opportunity to chat a little bit with my good friend, Matt Groves. However, due to some technical issues Matt was not able to join us live. That doesn't stop the show from going on though! 10 | 11 | Through the power of YouTube and video recording, Matt sat down and did a version of his talk for us to publish. 12 | 13 | Watch the video below, and check out the [Swift Kick YouTube channel](https://youtube.com/c/swiftkick). Like and subscribe for more great videos! 14 | 15 | ### NoSql Shouldn't Mean NoSecurity with Matt Groves 16 | 17 | >As NoSQL databases increase in popularity, they also increase in popularity with hackers. NoSQL databases are vulnerable to traditional attacks like SQL injection (yes, really). Further, the rush to productivity leaves some of these databases insecure-by-design. As a result, ransom notes have plagued databases like MongoDB, ElasticSearch, Hadoop, and CouchDB. This session demonstrates security mistakes and prevention. We’ll also look at what NoSQL vendors are doing to mitigate future attacks. Both devs and devops should come to this session, because the last thing either of you want to see is “SEND 0.2 BTC TO THIS ADDRESS 1zaGVjj9NcyvDLyYpCh33Msq TO RECOVER YOUR DATABASE!” 18 | 19 | **About Matt Groves** 20 | >Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Developer Advocate for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET (published by Manning), and is also a Microsoft MVP. 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /source/_posts/Running-a-Conference-Like-A-Startup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Running a Conference Like A Startup? 3 | permalink: running-a-conference-like-a-startup 4 | categories: 5 | - Community, User Groups, and Conferences 6 | id: 739 7 | date: 2014-02-23 21:57:40 8 | --- 9 | 10 | I've worked with a lot of different events. User groups, code camps, MADExpo (I'd link to it, but sadly the site went away a couple months ago), and others. 11 | 12 | They are always the same. *If you build it, they will come.* 13 | 14 | I really don't want that to sound negative, because it's not meant to. The leaders in the community are amazing, and lose a lot of sleep making sure an event is a success. And if it's a free event, they do all that knowing that potentially over 30-50% of the people that promised to attend will skip. 15 | 16 | Heck, even a paid event isn't much better. When we cancelled MADExpo in 2013, I received numerous comments from people saying "Oh, I was looking so forward to MADExpo this year!" That's awesome! Why didn't buy a ticket? 17 | 18 | Since the cancellation of MADExpo, I've been itching to do something new in our area. However, the model of *build it, and they come* didn't seem like it worked anymore. At least, not for a new event. 19 | 20 | By the pressure of my partner-in-crime, [Bret Fisher](http://fishbrains.com), I've been listening through [The Lean Startup](http://www.amazon.com/gp/product/B004J4XGN6/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B004J4XGN6&linkCode=as2&tag=kevgr-20). The chapter on building a minimum viable product struct a chord with me. Build the absolute minimum to start the learning process of what people want. 21 | 22 | Over the course of two days, I built the minimum viable product for [757DevCon](http://757devcon.com). It's strictly an interest site. I'm throwing out an idea, and you can register for my list if you want to hear more. 23 | 24 | Behind the scenes, I have a series of emails planned out to extract crucial information I need from my potential customers. It's not so much about what they want from a conference, but what are they willing to pay for? 25 | 26 | So what are you waiting for? Go [get on the list](http://757devcon.com), and I'll keep you updated! 27 | 28 | I'd love to hear your questions and thoughts. Post them in the comments below. 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /source/_posts/A-Diet-Programmers-Can-Relate-To.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Diet Programmers Can Relate To 3 | permalink: a-diet-programmers-can-relate-to 4 | categories: 5 | - Health 6 | id: 583 7 | updated: '2009-02-06 06:52:21' 8 | date: 2009-02-06 06:52:21 9 | --- 10 | 11 | Consider this: programmers are typically overweight.  It's our nature.  Ninety-five percent of our job is sitting behind a desk and hacking at a keyboard.  The most movement we get is walking to the bathroom, and going to our car to go to the drive thru. 12 | 13 | About a month ago, I was turned onto the Weight Watchers plan, and it immediately occurred to me that this is the perfect diet plan for developers.  Here is the gist of the plan:  You're allotted x number of points a day.  Points come from the foods and drinks you put into your body.  The number of points you're allowed is based on your gender, weight, height, and activity level. 14 | 15 | The points in a piece of food is determined by the number of calories, total fat, and fiber content of the food.  Anyone that pays to join Weight Watchers is given a calculator for determining the points.  In reality, it's just an equation.  Developers like equations.  We can understand equations.  Here is the equation for Weight Watchers Points: 16 | 17 | POINTS = (Calories / 50) + (Total Fat / 12) - (MIN(Fiber, 4) / 5) 18 | 19 | Ooooh.  That could easily be plugged into a script.  How does this fit into the real world?  My number of points allotted per day is 39.  There is a formula for figuring that out, but I've been unable to find it.  If/when I do, I'll post it here.  But for the record, I'm 6'1, 259 pounds and sit at a desk all day.  If you weigh more than I do, add 1 point per 10 pound increment (260 pounds is technically 40 points).  If you weight less, subtract 1 point per 10 pound increment.  If you are taller than me, add a point or two.  If you're shorter, subtract a point or two.  You should see what I mean. 20 | 21 | Say I go to Burger King, and buy a Whopper with cheese.  That weighs in at 19 pounds (the mayo kills it).  After eating a Whopper, I've already had half my number of points for the day.  Weight Watchers says that's cool, but be careful with your other 20 points.  You still eat what you want, just eat less of it and try to find better alternatives. 22 | 23 | So now you can do the Weight Watchers plan for free.  Use the points equation to do whatever you want.  Lose weight mathematically! -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/php/twitter/connection/Application.php: -------------------------------------------------------------------------------- 1 | _consumerKey = $consumerKey; 30 | $this->_consumerSecret = $consumerSecret; 31 | } 32 | 33 | /** 34 | * @param string $url 35 | * @param array $parameters 36 | * @param $method 37 | * @return array 38 | */ 39 | protected function _buildHeaders($url,array $parameters = null,$method) 40 | { 41 | return $headers = array( 42 | "Authorization: Bearer " . $this->_getBearerToken() 43 | ); 44 | } 45 | 46 | /** 47 | * Get Bearer token 48 | * 49 | * @link https://dev.twitter.com/docs/auth/application-only-auth 50 | * 51 | * @throws \TwitterPhp\RestApiException 52 | * @return string 53 | */ 54 | private function _getBearerToken() { 55 | if (!$this->_bearersToken) { 56 | $token = urlencode($this->_consumerKey) . ':' . urlencode($this->_consumerSecret); 57 | $token = base64_encode($token); 58 | 59 | $headers = array( 60 | "Authorization: Basic " . $token 61 | ); 62 | 63 | $options = array ( 64 | CURLOPT_URL => self::TWITTER_API_AUTH_URL, 65 | CURLOPT_HTTPHEADER => $headers, 66 | CURLOPT_POST => 1, 67 | CURLOPT_POSTFIELDS => "grant_type=client_credentials" 68 | ); 69 | 70 | $response = $this->_callApi($options); 71 | 72 | if (isset($response["token_type"]) && $response["token_type"] == 'bearer') { 73 | $this->_bearersToken = $response["access_token"]; 74 | } else { 75 | throw new RestApiException('Error while getting access token'); 76 | } 77 | } 78 | return $this->_bearersToken; 79 | } 80 | } -------------------------------------------------------------------------------- /themes/griffin/source/plugins/morphext/morphext.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Morphext - Text Rotating Plugin for jQuery 3 | * https://github.com/MrSaints/Morphext 4 | * 5 | * Built on jQuery Boilerplate 6 | * http://jqueryboilerplate.com/ 7 | * 8 | * Copyright 2014 Ian Lai and other contributors 9 | * Released under the MIT license 10 | * http://ian.mit-license.org/ 11 | */ 12 | 13 | /*eslint-env browser */ 14 | /*global jQuery:false */ 15 | /*eslint-disable no-underscore-dangle */ 16 | 17 | (function ($) { 18 | "use strict"; 19 | 20 | var pluginName = "Morphext", 21 | defaults = { 22 | animation: "bounceIn", 23 | separator: ",", 24 | speed: 2000, 25 | complete: $.noop 26 | }; 27 | 28 | function Plugin (element, options) { 29 | this.element = $(element); 30 | 31 | this.settings = $.extend({}, defaults, options); 32 | this._defaults = defaults; 33 | this._init(); 34 | } 35 | 36 | Plugin.prototype = { 37 | _init: function () { 38 | var $that = this; 39 | this.phrases = []; 40 | 41 | this.element.addClass("morphext"); 42 | 43 | $.each(this.element.text().split(this.settings.separator), function (key, value) { 44 | $that.phrases.push($.trim(value)); 45 | }); 46 | 47 | this.index = -1; 48 | this.animate(); 49 | this.start(); 50 | }, 51 | animate: function () { 52 | this.index = ++this.index % this.phrases.length; 53 | this.element[0].innerHTML = "" + this.phrases[this.index] + ""; 54 | 55 | if ($.isFunction(this.settings.complete)) { 56 | this.settings.complete.call(this); 57 | } 58 | }, 59 | start: function () { 60 | var $that = this; 61 | this._interval = setInterval(function () { 62 | $that.animate(); 63 | }, this.settings.speed); 64 | }, 65 | stop: function () { 66 | this._interval = clearInterval(this._interval); 67 | } 68 | }; 69 | 70 | $.fn[pluginName] = function (options) { 71 | return this.each(function() { 72 | if (!$.data(this, "plugin_" + pluginName)) { 73 | $.data(this, "plugin_" + pluginName, new Plugin(this, options)); 74 | } 75 | }); 76 | }; 77 | })(jQuery); 78 | -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/php/youtube/class-youtube.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | class TP_youtube { 14 | 15 | /** 16 | * API key 17 | * 18 | * @since 1.0.0 19 | * @access private 20 | * @var string $api_key Youtube API key 21 | */ 22 | private $api_key; 23 | 24 | /** 25 | * Channel ID 26 | * 27 | * @since 1.0.0 28 | * @access private 29 | * @var string $channel_id Youtube Channel ID 30 | */ 31 | private $channel_id; 32 | 33 | /** 34 | * Initialize the class and set its properties. 35 | * 36 | * @since 1.0.0 37 | * @param string $api_key Youtube API key. 38 | */ 39 | public function __construct($api_key,$channel_id) { 40 | $this->api_key = $api_key; 41 | $this->channel_id = $channel_id; 42 | } 43 | 44 | 45 | /** 46 | * Get Youtube Playlists 47 | * 48 | * @since 1.0.0 49 | */ 50 | public function get_playlists(){ 51 | //call the API and decode the response 52 | $url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=".$this->channel_id."&key=".$this->api_key; 53 | $rsp = json_decode(file_get_contents($url)); 54 | return $rsp->items; 55 | } 56 | 57 | /** 58 | * Get Youtube Playlist Items 59 | * 60 | * @since 1.0.0 61 | * @param string $playlist_id Youtube Playlist ID 62 | * @param integer $count Max videos count 63 | */ 64 | public function show_playlist_videos($playlist_id,$count=50){ 65 | //call the API and decode the response 66 | $url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=".$playlist_id."&maxResults=".$count."&fields=items%2Fsnippet&key=".$this->api_key; 67 | $rsp = json_decode(file_get_contents($url)); 68 | return $rsp->items; 69 | } 70 | 71 | /** 72 | * Get Youtube Channel Items 73 | * 74 | * @since 1.0.0 75 | * @param integer $count Max videos count 76 | */ 77 | public function show_channel_videos($count=50){ 78 | //call the API and decode the response 79 | $url = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=".$this->channel_id."&maxResults=".$count."&key=".$this->api_key."&order=date"; 80 | echo $url; 81 | $rsp = json_decode(file_get_contents($url)); 82 | return $rsp->items; 83 | } 84 | } 85 | ?> -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Hexo Configuration 2 | ## Docs: https://hexo.io/docs/configuration.html 3 | ## Source: https://github.com/hexojs/hexo/ 4 | 5 | # Site 6 | title: KevGriffin.com 7 | subtitle: 8 | description: 9 | author: Kevin Griffin 10 | language: En 11 | timezone: 12 | 13 | # URL 14 | ## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' 15 | url: https://kevgriffin.com 16 | root: / 17 | permalink: :title/ 18 | permalink_defaults: 19 | 20 | # Directory 21 | source_dir: source 22 | public_dir: public 23 | tag_dir: tags 24 | archive_dir: archives 25 | category_dir: categories 26 | code_dir: downloads/code 27 | i18n_dir: :lang 28 | skip_render: 29 | 30 | # Writing 31 | new_post_name: :title.md # File name of new posts 32 | default_layout: post 33 | titlecase: false # Transform title into titlecase 34 | external_link: true # Open external links in new tab 35 | filename_case: 0 36 | render_drafts: false 37 | post_asset_folder: false 38 | relative_link: false 39 | future: true 40 | highlight: 41 | enable: true 42 | line_number: true 43 | auto_detect: false 44 | tab_replace: 45 | 46 | # Category & Tag 47 | default_category: uncategorized 48 | category_map: 49 | tag_map: 50 | 51 | # Date / Time format 52 | ## Hexo uses Moment.js to parse and display date 53 | ## You can customize the date format as defined in 54 | ## http://momentjs.com/docs/#/displaying/format/ 55 | date_format: YYYY-MM-DD 56 | time_format: HH:mm:ss 57 | 58 | # Pagination 59 | ## Set per_page to 0 to disable pagination 60 | per_page: 10 61 | pagination_dir: page 62 | 63 | # Extensions 64 | ## Plugins: https://hexo.io/plugins/ 65 | ## Themes: https://hexo.io/themes/ 66 | theme: griffin 67 | 68 | marked: 69 | breaks: false 70 | 71 | # Deployment 72 | ## Docs: https://hexo.io/docs/deployment.html 73 | deploy: 74 | type: git 75 | repo: https://kevgriff@kevgriffindotcom.scm.azurewebsites.net:443/kevgriffindotcom.git 76 | branch: master 77 | message: Site updated {{ now("YYYY-MM-DD HH:mm:ss") }} 78 | 79 | sitemap: 80 | path: sitemap.xml 81 | 82 | feed: 83 | type: atom 84 | path: atom.xml 85 | limit: 0 86 | hub: 87 | content: 88 | 89 | html_minifier: 90 | enable: true 91 | ignore_error: false 92 | exclude: 93 | 94 | css_minifier: 95 | enable: true 96 | exclude: 97 | - '*.min.css' 98 | 99 | js_minifier: 100 | enable: true 101 | mangle: true 102 | output: 103 | compress: 104 | exclude: 105 | - '*.min.js' -------------------------------------------------------------------------------- /source/_posts/My-Attempt-at-LINQ-Pagination.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My Attempt at LINQ Pagination 3 | categories: 4 | - "Development - C#" 5 | permalink: my-attempt-at-linq-pagination 6 | date: 2009-10-16 06:00:10 7 | --- 8 | 9 |

Today I’ve been diving into an easy way to paginate record sets in my applications.  Searching around the internet yielded several good walkthroughs on how to do this.  My favorite way came from my friend, Kevin Hazzard, He discussed using the Skip() and Take() extension methods to form fit LINQ into building a SQL statement that’ll do all the heavy lifting for you.

Copying from Kevin’s example, I built the following code snippet:

int pageNumber = 1;
10 | int pageSize = 20;
11 | 
12 | using (var entity = new Entities())
13 | {
14 | 	var recordSet = (from r in entity.SomeTable
15 | 			orderby r.SomeID
16 | 			select r);
17 | 	recordSet = recordSet.Skip((pageNumber - 1) * pageSize).Take(pageSize);
18 | 
19 | 	return recordSet;
20 | }
21 | 22 |

What’s nice about the following code is that since LINQ is lazy loading, the SQL built doesn’t actually execute until we need it too.  The days of returning full datasets are done (yes, we’re still doing that on some projects). 

23 | 24 |

I went the next step to see if I could build an extension method of my own that did all of the above for me automatically.  Here was the result I came up with:

25 | 26 |
public static class ExtensionMethods
27 | {
28 | 	public static IQueryable Paginate(this IQueryable content, int pageNumber, int pageSize)
29 |         {
30 |             return content.Skip((pageNumber - 1)*pageSize).Take(pageSize);
31 |         }
32 | }
33 | 34 |

This extension method takes the query returned from LINQ (an IQueryable), and applies the additional constraints to it.  Here is the first example using my new extension method:

35 | 36 |
int pageNumber = 1;
37 | int pageSize = 20;
38 | 
39 | using (var entity = new Entities())
40 | {
41 | 	var recordSet = (from r in entity.SomeTable
42 | 			orderby r.SomeID
43 | 			select r);
44 | 	recordSet = recordSet.Paginate(pageNumber, pageSize);
45 | 
46 | 	return recordSet;
47 | }
48 | 49 |

 

50 | 51 |

Ta da!  Hopefully that makes sense.  I’m open to other suggestions and comments.  I’m learning that if I take about my thought processes on certain problems, that I receive a ton of great feedback from those who listen.

-------------------------------------------------------------------------------- /source/_posts/Leaving-It-Better-Than-You-Found-It.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leaving It Better Than You Found It 3 | categories: 4 | - Deep Thoughts 5 | permalink: leaving-it-better-than-you-found-it 6 | date: 2010-01-26 06:00:00 7 | --- 8 | 9 |

When my wife and I bought our house back in April, one of my pet projects has been to renovate the room over our garage.  I knew buying the house that it would be a lot of work, partly because the previous owner didn’t know what he was doing when finishing a room.  I’ve spent the last week and half sanding, mudding, and fixing all the walls in this room.  While sanding some dried mud tonight, I had a thought about how this experience was a lot like building software.

When building software, you’re not sometimes lucky enough to build a system from the ground up.  Normally, you’ll inherit code from developers who have been hacking it for years.  I related this to me working in my room.  I inherited a poorly maintained room.  The joints weren’t level with each other and the mud of the wall wasn’t smooth.  The person doing the work took no pride in the work being done.  The ceiling was also a “hacked” popcorn ceiling.  I say hacked because, instead of using a hopper, the person slung dry wall mud onto the ceiling giving the illusion of popcorn.  The illusion failed though because it looked horrible.

Fast forward to my work in the room last week.  I had to go through and scrap all the excess mud off the wall.  Each wall and joint had to be sanded, and mudded again in order to level everything.  I’ve spend hours of time trying to reverse the effects caused by performing the job incorrectly.

What does this have to do with software development?  Think about when you’re working on a bug in a piece of code, and it’s your first time looking at this code.  How the previous developer left the code is how you’re going to inherit it.  You might have to spend hours undoing the work of the previous person in order to get the code to a state it can be worked with.  Hacks might have to be removed and properly implemented.  Hours will be wasted that didn’t have to be.

When working on new code, do yourself and future developers a favor and leave the code in a state where it can be easily picked up and worked on.  If you’re working on existing code, try to leave it in a better state than it was when you found it.  In the long run, time will be saved, code will be more secure, and a developer will say fewer curse words.

-------------------------------------------------------------------------------- /source/_posts/Building-better-ConnectionStrings-with-ConnectionStringBuilder.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Building better ConnectionStrings with ConnectionStringBuilder 3 | categories: 4 | - "Development - C#" 5 | permalink: building-better-connectionstrings-with-connectionstringbuilder 6 | date: 2011-02-14 05:00:02 7 | --- 8 | 9 | Okay, I never admitted to being a .NET guru or anything, and that’s why I get so excited whenever I run across a gem in the framework that allows me to do something easier and with fewer issues. 10 | 11 | ConnectionStrings has always been one of those things I did the hard way.  For example, I would have a line of code that was like so: 12 | 13 |
14 | string connectionString =  "Data Source={0};Initial Catalog={1};User Id={2};Password={3};";
15 | string.Format(connectionString, serverName, databaseName, userName, password);
16 | 
17 | 18 | This seemed like a logical way to build my connection strings.  However, it wasn’t very flexible.  That was until I discovered the suite of ConnectionStringBuilder classes. 19 | 20 | Let’s take the above OleDb connection string and use the OleDbConnectionStringBuilder to build it. 21 | 22 |
23 | System.Data.OleDb.OleDbConnectionStringBuilder oleDbConnectionStringBuilder  =
24 |             new OleDbConnectionStringBuilder();
25 | oleDbConnectionStringBuilder.DataSource = "myServer";
26 | oleDbConnectionStringBuilder.FileName = "myAccessFile.mdb";
27 | oleDbConnectionStringBuilder.ToString();
28 | 
29 | 30 | Look at how much cleaner that is!  Maybe you’re working with a SQL Server database: 31 | 32 |
33 | System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder =
34 |                 new SqlConnectionStringBuilder();
35 | connectionStringBuilder.DataSource = "myServer";
36 | connectionStringBuilder.InitialCatalog = "databaseName";
37 | connectionStringBuilder.UserID = "userName";
38 | connectionStringBuilder.Password = "password";
39 | connectionStringBuilder.ToString();
40 | 
41 | 42 | Isn’t that awesome?!  Now, finally, let’s imagine you’re doing all this with Entity Framework: 43 | 44 |
45 | System.Data.EntityClient.EntityConnectionStringBuilder entityConnectionStringBuilder =
46 |                 new EntityConnectionStringBuilder();
47 | entityConnectionStringBuilder.ProviderConnectionString = connectionStringBuilder.ToString();
48 | entityConnectionStringBuilder.Metadata = "(entity framework metadata here)";
49 | entityConnectionStringBuilder.ToString();
50 | 
51 | 52 | There you go!  Instead of hand writing your connection strings, take a look to see if there is a StringBuilder class that’ll do the work for you. -------------------------------------------------------------------------------- /source/_posts/Banks-ATMS-and-Horrible-User-Experiences.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Banks, ATMS, and Horrible User Experiences' 3 | permalink: banks-atms-and-horrible-user-experiences 4 | categories: 5 | - Deep Thoughts 6 | id: 778 7 | updated: '2015-08-20 21:52:06' 8 | date: 2015-08-03 09:18:46 9 | --- 10 | 11 | *Note: I'm pretty much going to rant about a bank experience I had. Lessons aren't obvious, but if you're designing something that's pretty dang important... make sure you have failsafes built-in.* 12 | 13 | I went to my local ATM yesterday to deposit a couple checks. I know, I know... why didn't I just use my phone? Turns out banking phone apps have limits on how much you can deposit through the app and I was well past that limit. ATM was a logical second choice if I didn't want to have to make visit to a teller. 14 | 15 | Generally, this type of visit is quick. 16 | 17 | 1. Pull up to ATM 18 | 2. Insert ATM card 19 | 3. Type in PIN number 20 | 4. Press DEPOSIT, select account. 21 | 5. Insert checks (optical reader will automatically figure out amounts) 22 | 6. Receipt, and on my way! 23 | 24 | Problem started around step 5. I put my checks into the reader where it proceeded to give me a "PROCESSING YOUR DEPOSIT" screen. Normally, this process takes 10 seconds. 25 | 26 | Ten seconds pass... 27 | Then a minute... 28 | OKAY.. five minutes... 29 | 30 | I'm starting to get a bit freaked out because I put a couple good sized checks into a machine and it's not doing anything! 31 | 32 | Next step is to try to call someone. My bank provides a 1-800 number for customer service. Turns out, there is no logical path for "OMG THE ATM STOLE MY CHECKS AND IS FROZEN". And really, there is no path for "I request to speak to a human who can properly direct this call." 33 | 34 | 30 minutes into my freak. I turned two other folks away because ATM was borked. All of a sudden, the screen flashes and pretends like NOTHING HAPPENED AT ALL. "Would you like to deposit the checks?" I pressed the **go** button and the ATM spat my checks out and told me to have a nice day. Wat? 35 | 36 | I also had a decent "check hold" on my account, which is normal when checks are processed. The bank is still investigating what the issue might have been. 37 | 38 | I'm pretty fortunate that I decided to stick around - or else someone might have been able to swipe my checks. Why doesn't the ATM go into "maintenance mode" or something after five minutes of not responding? Thirty minutes is way too long to wait for any sort of respond. 39 | 40 | On another note, why is there physically no way to talk to a human on the phone? At a minimum, I wanted the bank to have an option to "Press 0 if you just need to talk to someone." 41 | 42 | Blah. What horrible user experiences have you had with technology? -------------------------------------------------------------------------------- /themes/griffin/source/plugins/rs-plugin-5/php/twitter/RestApi.php: -------------------------------------------------------------------------------- 1 | 4 | * @license MIT License 5 | * @link https://github.com/vojant/Twitter-php 6 | */ 7 | 8 | namespace TwitterPhp; 9 | 10 | use \TwitterPhp\Connection\Application; 11 | use \TwitterPhp\Connection\User; 12 | 13 | require_once 'connection/ConnectionAbstract.php'; 14 | require_once 'connection/Application.php'; 15 | require_once 'connection/User.php'; 16 | 17 | /** 18 | * Class TwitterRestApiException 19 | */ 20 | class RestApiException extends \Exception {}; 21 | 22 | /** 23 | * Class RestApi 24 | * @package TwitterPhp 25 | */ 26 | class RestApi 27 | { 28 | /** 29 | * @var string 30 | */ 31 | private $_consumerKey; 32 | 33 | /** 34 | * @var string 35 | */ 36 | private $_consumerSecret; 37 | 38 | /** 39 | * @var string 40 | */ 41 | private $_accessToken; 42 | 43 | /** 44 | * @var string 45 | */ 46 | private $_accessTokenSecret; 47 | 48 | 49 | /** 50 | * @param string $consumerKey 51 | * @param string $consumerSecret 52 | * @param null|string $accessToken 53 | * @param null|string $accessTokenSecret 54 | * @throws TwitterRestApiException 55 | */ 56 | public function __construct($consumerKey,$consumerSecret,$accessToken = null,$accessTokenSecret = null) 57 | { 58 | if (!function_exists('curl_init')) { 59 | throw new TwitterRestApiException('You must have the cURL extension enabled to use this library'); 60 | } 61 | $this->_consumerKey = $consumerKey; 62 | $this->_consumerSecret = $consumerSecret; 63 | $this->_accessToken = $accessToken; 64 | $this->_accessTokenSecret = $accessTokenSecret; 65 | } 66 | 67 | /** 68 | * Connect to Twitter API as application. 69 | * @link https://dev.twitter.com/docs/auth/application-only-auth 70 | * 71 | * @return \TwitterPhp\Connection\Application 72 | */ 73 | public function connectAsApplication() 74 | { 75 | return new Application($this->_consumerKey,$this->_consumerSecret); 76 | } 77 | 78 | /** 79 | * Connect to Twitter API as user. 80 | * @link https://dev.twitter.com/docs/auth/oauth/single-user-with-examples 81 | * 82 | * @return \TwitterPhp\Connection\User 83 | * @throws TwitterRestApiException 84 | */ 85 | public function connectAsUser() 86 | { 87 | if (!$this->_accessToken || !$this->_accessTokenSecret) { 88 | throw new TwitterRestApiException('Missing ACCESS_TOKEN OR ACCESS_TOKEN_SECRET'); 89 | } 90 | return new User($this->_consumerKey,$this->_consumerSecret,$this->_accessToken,$this->_accessTokenSecret); 91 | } 92 | 93 | } -------------------------------------------------------------------------------- /themes/griffin/source/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | > 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /source/_posts/Speaker-Gifts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Speaker Gifts 3 | categories: 4 | - Community, User Groups, and Conferences 5 | permalink: speaker-gifts 6 | date: 2015-01-13 17:47:38 7 | --- 8 | 9 | > This post is a part of a series I wanted to do on simple user group management tips. 10 | 11 | When you visit a user group, the person standing at the computer is most likely not being paid. In fact, a large majority of the technical speaker circuit is filled with unpaid speakers. Not only that, the speaker might incur costs just for having come out. 12 | 13 | **What costs would a speaker have?** 14 | Great question! 15 | 16 | * **Gas** 17 | Let's imagine someone is driving ~4-8 hours round trip to visit a user group. This will include one or two tanks of gas, depending on the type of vehicle you're driving. 18 | * **Hotel** 19 | If I'm driving more than 4 hours in one direction to visit a user group, I probably want to get a hotel for the night. 20 | * **Lost wages** 21 | Odds are if I'm driving to a user group, I need to take the afternoon off work. This means I'm burning PTO or (if you're like me), you're not billing time. 22 | 23 | Organizations like [INETA](http://www.ineta.org) have programs to help offset the costs of for speakers. For example, if I were to travel over 360 miles, INETA will reimburse me $200 for the trip. That's pretty good and covers most of my costs of speaking. 24 | 25 | **How can the user group help?** 26 | I understand that asking you to cover speaker costs is a huge thing. So I'm not going to do that. Still assume that speakers will come of their own freewill and will cover their own costs. 27 | 28 | Consider this: Your goal as a user group leader is to promote the local technology scene. You want to attract people to show up and learn, but you also want to attract great speakers! 29 | 30 | A couple months ago, our user group started a process of giving out speaker gifts. We don't promote it ("HEY EVERYONE! LOOK AT US GIVING A SPEAKER GIFT!"). Instead, the speaker loves the thought behind the gift and keeps us in mind for a return visit in the future. 31 | 32 | These speakers will then talk about you to their speaker friends. "Hey, those guys at the Hampton Roads .NET group are really cool. I definitely recommend getting on their calendar." 33 | 34 | **What kind of gift can we give?** 35 | We just give a $50 Amazon gift card in one of the fancy boxes. That's pretty good, and it's a cost we subsidize with sponsor money. 36 | 37 | A couple months ago, I visited a group called [GANG](http://migang.org) where they gave me a engraved metal mug. That was awesome, and it makes me definitely want to come back. 38 | 39 | Why not start simple and give the speaker a thank you card signed by all the organizers and some of the attendees? Every little bit you can do makes a difference. 40 | -------------------------------------------------------------------------------- /themes/griffin/layout/partials/scripts.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{!-- 9 | --}} 10 | 11 | {{!----}} 12 | 13 | {{!----}} 14 | 15 | 16 | 17 | 18 | {{!----}} 19 | 20 | 21 | 22 | 23 | 24 | 36 | 37 | 51 | 52 | --------------------------------------------------------------------------------