[{"data":1,"prerenderedAt":461},["ShallowReactive",2],{"article-new-blog-engine-static":3},{"article":4,"tags":78,"previous":79,"next":395},{"id":5,"title":6,"author":7,"body":8,"createdAt":7,"description":70,"extension":71,"img":7,"meta":72,"navigation":73,"path":74,"seo":75,"stem":76,"tags":7,"updatedAt":7,"__hash__":77},"articles\u002Farticles\u002Fnew-blog-engine-static.md","New Blog Engine Static",null,{"type":9,"value":10,"toc":67},"minimark",[11,14,25,32,34,49,56,59],[12,13],"hr",{},[15,16,17,18,21,22,24],"p",{},"title: Update to Blog\ndescription: Just a quick note about updating to new blog theme\u002Fapproach\u002Fplatform.\ncreatedAt: 2021-04-24\nupdatedAt: 2021-04-24\nimg: \u002Farticles\u002Fimages\u002Fwebhost.jpg\nauthor:",[19,20],"br",{},"\nname: Admin",[19,23],{},"\ntags:",[26,27,28],"ul",{},[29,30,31],"li",{},"general",[12,33],{},[15,35,36,37,43,44,48],{},"Yes I am updating blog and web site as part of personal brand update.  I have been hosting on ",[38,39,42],"a",{"href":40,"target":41},"https:\u002F\u002Fwww.a2hosting.com\u002F","_blank","A2 Hosting","\nfor the last few years.  Recently, they sold their Windows hosting to ",[38,45,47],{"href":46,"target":41},"https:\u002F\u002Fwww.mochahost.com\u002F","Mochahost","  While service and uptime has improved there are other much lower cost alternatives.",[15,50,51],{},[52,53],"img",{"alt":54,"src":55},"","\u002Farticles\u002Fimages\u002Fkramer.png",[15,57,58],{},"Yes, I do question myself when I do these things, but overall it is a good investment both technology and the constant learning effort required in the technology field.",[15,60,61,62,66],{},"I decided to invest in the ",[38,63,65],{"target":41,"href":64},"https:\u002F\u002Fnuxtjs.org\u002F","Nuxt.js","  After I evaluated a number of different blogging platforms,\nI found this to be the most aligned with my areas of interest.  Nuxt is a modular framework optimized out of the box based on Vue.js.  Nuxt suppports\nequally server side rendered (SSR) and static site generation approaches.  I hope to blogging more about my experience with this platform for the\nforeseeable future (until the next platform change).",{"title":54,"searchDepth":68,"depth":68,"links":69},2,[],"title: Update to Blog\ndescription: Just a quick note about updating to new blog theme\u002Fapproach\u002Fplatform.\ncreatedAt: 2021-04-24\nupdatedAt: 2021-04-24\nimg: \u002Farticles\u002Fimages\u002Fwebhost.jpg\nauthor:\nname: Admin\ntags:","md",{},true,"\u002Farticles\u002Fnew-blog-engine-static",{"description":70},"articles\u002Fnew-blog-engine-static","A5bAV-jKLqEpJpj3LibYl2gI4xq66-qtVBQONxX4Ra8",[],{"id":80,"title":81,"author":7,"body":82,"createdAt":7,"description":389,"extension":71,"img":7,"meta":390,"navigation":73,"path":391,"seo":392,"stem":393,"tags":7,"updatedAt":7,"__hash__":394},"articles\u002Farticles\u002Fbootstrap-with-less-part-2.md","Bootstrap With Less Part 2",{"type":9,"value":83,"toc":387},[84,86,100,105,107,115,118,121,124,129,137,140,143,146,154,157,163,166,171,177,370,373,380,383],[12,85],{},[15,87,88,89,91,92,94,95,97,98,24],{},"title: Bootstrap with LESS (Part 2)",[19,90],{},"\ndescription: CSS has become complex, lets figure it out\ncreatedAt: 2015-06-05T11:07:35.2100000-04:00\nupdatedAt: 2015-06-05T11:07:35.2100000-04:00\nimg: \u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_11b1b-grunt_thumb.png",[19,93],{},"\nauthor:",[19,96],{},"\nname: David",[19,99],{},[26,101,102],{},[29,103,104],{},"aspnet",[12,106],{},[15,108,109,110,114],{},"Ok, so how did css become so complex and what the heck is ",[38,111,113],{"href":112},"http:\u002F\u002Fgruntjs.com\u002F","Grunt","? Grunt is a task runner.  There are a number of open source task runners.  Grunt is just one of the more popular ones.  In our scenario we will be using Grunt (a task runner) to convert less into css as well as to uglify and minify and copy files to different directories.",[15,116,117],{},"The following are steps that I recently used to setup our environment to edit the most recent release of Bootstrap (3.x) while taking advantage of all the existing Less files.  Grunt will automate a number of tasks for us.  In addition the details below will setup a Visual Studio 2013 environment to use Grunt to build and deploy our Bootstrap files.",[15,119,120],{},"1.) Create Empty MVC project",[15,122,123],{},"2.) Include bootstrap files into project (all folders and files when unzipping bootstrap source) i.e. dist, docs, fonts, grunt, js, less etc. Note: do not include node_modules  I had issues with long path with one of the node modules (besides these will be downloaded automatically after install)",[52,125],{"src":126,"border":127,"alt":128,"title":128},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-solutionexplorer_thumb.jpg",0,"solutionexplorer",[15,130,131,132,136],{},"3.) Ensure you have ",[38,133,135],{"href":134},"https:\u002F\u002Fnodejs.org\u002F","node.js"," installed on your workstation.   Node what is node…is a open source cross-platform environment for easily building fast, scalable network applications.  Node.js applications are written in JavaScript and can be run within the runtime on OS X, Windows, Linux etc.  However in our usage we will be using this platform to download install other JavaScript applications.",[15,138,139],{},"4.) Open a command prompt to your project location and run > npm install (this will read the grunt packages json file and download necessary modules).  As information, npm is short for Node Package Manager.  NPM is to Node as Nuget is to Visual Studio.  That is a good way of thinking about it.",[15,141,142],{},"5.) At the command prompt > grunt (this will execute all tasks and run the tests)",[15,144,145],{},"6.) Now the task is to get grunt to run upon project building (yes we are wanting to automatically run grunt after we build the empty mvc project within vs.net).  Download and install the Web Essentials extension from the gallery.",[15,147,148,149,153],{},"7.) Download install the ",[38,150,152],{"href":151},"https:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F8e1b4368-4afb-467a-bc13-9650572db708","Task Runner Explorer"," extension as well.",[15,155,156],{},"8.) Open the MVC project and right click on Gruntfile.js  You will see a new option.",[52,158],{"src":159,"border":127,"alt":160,"title":160,"width":161,"height":162},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-taskrunner_thumb.jpg","taskrunner",244,165,[15,164,165],{},"9.) Add dist to the after build task (you can do this by dragging to the after build folder).  This will connect grunt to run dist task after vs.net builds.",[52,167],{"src":168,"border":127,"alt":169,"title":169,"width":161,"height":170},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-taskrunner_2_thumb.jpg","taskrunner_2",81,[15,172,173,174,176],{},"10.) Now after I build my project, what I want is for grunt to build the css based on the less, the copy the output to a particular directory on my pc.",[19,175],{},"\nAt this point, I opened gruntfile.js.  I am going to extend the current copy task to include a copyToServer option.",[178,179,183],"pre",{"className":180,"code":181,"language":182,"meta":54,"style":54},"language-json shiki shiki-themes github-light github-dark","copy: {\n  fonts: {\n    expand: true,\n    src: 'fonts\u002F*',\n    dest: 'dist\u002F'\n  },\n  docs: {\n    expand: true,\n    cwd: 'dist\u002F',\n    src: [\n      '**\u002F*'\n    ],\n    dest: 'docs\u002Fdist\u002F'\n  },\n copyToServer: {\n      expand: true,\n      cwd: 'dist\u002F',\n      src: ['**\u002F*'],\n      dest: 'c:\u002Finetpub\u002Fwwwroot\u002Fserver\u002Fstylesheets\u002Fbootstrap\u002F'\n  }\n},  \n","json",[184,185,186,195,204,220,235,241,247,253,259,265,271,280,288,299,304,312,324,337,352,358,364],"code",{"__ignoreMap":54},[187,188,191],"span",{"class":189,"line":190},"line",1,[187,192,194],{"class":193},"sVt8B","copy: {\n",[187,196,197,201],{"class":189,"line":68},[187,198,200],{"class":199},"s7hpK","  fonts",[187,202,203],{"class":193},": {\n",[187,205,207,210,213,217],{"class":189,"line":206},3,[187,208,209],{"class":199},"    expand",[187,211,212],{"class":193},": ",[187,214,216],{"class":215},"sj4cs","true",[187,218,219],{"class":193},",\n",[187,221,223,226,228,231],{"class":189,"line":222},4,[187,224,225],{"class":199},"    src",[187,227,212],{"class":193},[187,229,230],{"class":199},"'fonts",[187,232,234],{"class":233},"sJ8bj","\u002F*',\n",[187,236,238],{"class":189,"line":237},5,[187,239,240],{"class":233},"    dest: 'dist\u002F'\n",[187,242,244],{"class":189,"line":243},6,[187,245,246],{"class":233},"  },\n",[187,248,250],{"class":189,"line":249},7,[187,251,252],{"class":233},"  docs: {\n",[187,254,256],{"class":189,"line":255},8,[187,257,258],{"class":233},"    expand: true,\n",[187,260,262],{"class":189,"line":261},9,[187,263,264],{"class":233},"    cwd: 'dist\u002F',\n",[187,266,268],{"class":189,"line":267},10,[187,269,270],{"class":233},"    src: [\n",[187,272,274,277],{"class":189,"line":273},11,[187,275,276],{"class":233},"      '**\u002F",[187,278,279],{"class":199},"*'\n",[187,281,283,286],{"class":189,"line":282},12,[187,284,285],{"class":199},"    ]",[187,287,219],{"class":193},[187,289,291,294,296],{"class":189,"line":290},13,[187,292,293],{"class":199},"    dest",[187,295,212],{"class":193},[187,297,298],{"class":199},"'docs\u002Fdist\u002F'\n",[187,300,302],{"class":189,"line":301},14,[187,303,246],{"class":193},[187,305,307,310],{"class":189,"line":306},15,[187,308,309],{"class":199}," copyToServer",[187,311,203],{"class":193},[187,313,315,318,320,322],{"class":189,"line":314},16,[187,316,317],{"class":199},"      expand",[187,319,212],{"class":193},[187,321,216],{"class":215},[187,323,219],{"class":193},[187,325,327,330,332,335],{"class":189,"line":326},17,[187,328,329],{"class":199},"      cwd",[187,331,212],{"class":193},[187,333,334],{"class":199},"'dist\u002F'",[187,336,219],{"class":193},[187,338,340,343,346,349],{"class":189,"line":339},18,[187,341,342],{"class":199},"      src",[187,344,345],{"class":193},": [",[187,347,348],{"class":199},"'**",[187,350,351],{"class":233},"\u002F*'],\n",[187,353,355],{"class":189,"line":354},19,[187,356,357],{"class":233},"      dest: 'c:\u002Finetpub\u002Fwwwroot\u002Fserver\u002Fstylesheets\u002Fbootstrap\u002F'\n",[187,359,361],{"class":189,"line":360},20,[187,362,363],{"class":233},"  }\n",[187,365,367],{"class":189,"line":366},21,[187,368,369],{"class":233},"},\n",[15,371,372],{},"I also added a new task so that I could execute this after a build with",[15,374,375,376,379],{},"\u002F\u002F new copy to server or local vdir\n  grunt.registerTask('copyToServer', ",[187,377,378],{},"'copy:copyToServer'",");",[15,381,382],{},"Finally, I am going to add this task to the after build step, so every time Visual Studio builds, it will execute Grunt to build the css via Less then it will copy the files to a particular directory after I build my Visual Studio project.  You can do this by right clicking on the copyToServer task and select After Build binding.",[384,385,386],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":54,"searchDepth":68,"depth":68,"links":388},[],"title: Bootstrap with LESS (Part 2)\ndescription: CSS has become complex, lets figure it out\ncreatedAt: 2015-06-05T11:07:35.2100000-04:00\nupdatedAt: 2015-06-05T11:07:35.2100000-04:00\nimg: \u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_11b1b-grunt_thumb.png\nauthor:\nname: David\ntags:",{},"\u002Farticles\u002Fbootstrap-with-less-part-2",{"description":389},"articles\u002Fbootstrap-with-less-part-2","mPxMED8Q645tR3tafSYbNmj55ZL7zdCq0B-mTtudJ98",{"id":396,"title":397,"author":7,"body":398,"createdAt":7,"description":455,"extension":71,"img":7,"meta":456,"navigation":73,"path":457,"seo":458,"stem":459,"tags":7,"updatedAt":7,"__hash__":460},"articles\u002Farticles\u002Fnew-blog-engine-subtext.md","New Blog Engine Subtext",{"type":9,"value":399,"toc":453},[400,402,412,416,418,424,441,444],[12,401],{},[15,403,404,405,407,408,21,410,24],{},"title: New Blog Engine - Subtext",[19,406],{},"\ndescription: New blog engine (another)\ncreatedAt: 2015-04-20T08:07:20.8100000-04:00\nupdatedAt: 2015-04-20T08:07:20.8100000-04:00\nimg: \u002Farticles\u002Fimages\u002FSubtextLogo.png\nauthor:",[19,409],{},[19,411],{},[26,413,414],{},[29,415,31],{},[12,417],{},[15,419,420,421,423],{},"Yes, this is a new blog engine that I am taking for a test drive.  I tried BlogEngine.net for a few weeks but found just too many things that were causing problems and very little support for the problems I was having.  BE is currently at version 1.4.   I really like the ‘templating’ features of that engine and there are quite a few extensions already developed.  I think BE will grow to be very mature product but at this time just too many problems.",[19,422],{},"\nI really wanted a stable blog engine at this point.  Subtext setup was very easy and so far has been rock solid. ",[15,425,426,427,429,430,432,433,436,440],{},"Good job with this.",[19,428],{},"\n ",[19,431],{},"\nMy old blog at ",[38,434],{"title":435,"href":435},"http:\u002F\u002Fdyardy.spaces.live.com\u002F",[38,437,435],{"href":435,"rel":438},[439],"nofollow"," still lives for the time being as I make the transition. ",[15,442,443],{},"Spaces is a great product but the time was right to get my blog back on my domain.  I have been using Spaces for 2.5 years and so I have many posts still on that engine.",[15,445,446,447,450],{},"Please update your RSS feeds to ",[38,448],{"title":449,"href":449},"http:\u002F\u002Ffeeds.feedburner.com\u002Fdavidyardy",[38,451,449],{"href":449,"rel":452},[439],{"title":54,"searchDepth":68,"depth":68,"links":454},[],"title: New Blog Engine - Subtext\ndescription: New blog engine (another)\ncreatedAt: 2015-04-20T08:07:20.8100000-04:00\nupdatedAt: 2015-04-20T08:07:20.8100000-04:00\nimg: \u002Farticles\u002Fimages\u002FSubtextLogo.png\nauthor:\nname: Admin\ntags:",{},"\u002Farticles\u002Fnew-blog-engine-subtext",{"description":455},"articles\u002Fnew-blog-engine-subtext","qrip7XgFl5rX2I6K69lQ9z1SeJfRd-Sx3Raf3S3By3E",1781574772335]