[{"data":1,"prerenderedAt":35109},["ShallowReactive",2],{"blog-index":3},{"articles":4,"tags":34578},[5,1112,1912,2367,2744,3211,3339,3591,4159,4703,5089,5457,5663,6309,6422,6553,6622,6756,6909,6992,7086,7454,7526,7558,7622,7764,7858,8110,8185,8358,8528,8622,8745,8996,9202,9310,9808,9985,10193,10314,10413,10636,10687,10811,10947,11048,11111,11249,11582,11731,11829,12063,12155,12200,12266,12308,12349,12443,12602,12869,13279,13543,13613,13814,13988,14046,14122,14158,14195,14227,14294,14371,14428,14530,14566,15316,15359,15564,15607,15727,15900,15992,16108,16199,16388,16435,16513,16601,16827,16863,16901,16968,17045,17108,17387,17563,18090,18231,18524,18661,18716,18794,18867,18923,19183,19429,19483,19541,19638,19702,19850,19960,20052,20181,20236,20265,20299,20323,20379,20428,20488,20571,20626,20708,20782,20930,21014,21092,21228,21338,21413,21458,21529,21604,21756,21796,21870,21937,22241,22278,22415,22441,22976,23003,23059,23173,23269,25182,25360,26337,26617,27797,28483,28557,28717,28754,29180,29261,29284,29317,29399,29744,29894,29919,30059,30114,30160,30208,30289,30341,30410,30479,30562,30663,31724,31764,31827,31890,31940,32064,32576,32746,32770,32823,32865,32904,33005,33126,33178,33593,34024,34296,34353,34417,34509],{"id":6,"title":7,"author":8,"body":9,"createdAt":1099,"description":1100,"extension":1101,"img":1102,"meta":1103,"navigation":1104,"path":1105,"seo":1106,"stem":1107,"tags":1108,"updatedAt":1099,"__hash__":1111},"articles\u002Farticles\u002F2026_06_AI_Predictions_1.md","What to Expect from AI Across Technology Jobs in the Next 6 Months","[object Object]",{"type":10,"value":11,"toc":1079},"minimark",[12,23,28,31,34,38,41,44,47,66,69,72,74,78,81,101,104,107,110,113,130,133,136,153,160,162,166,169,192,195,198,201,221,224,227,230,235,237,241,244,247,276,279,282,285,288,291,320,323,325,329,332,335,364,367,370,390,393,396,416,418,422,425,428,431,457,460,463,466,469,472,498,503,505,509,512,515,541,544,547,550,553,579,581,585,588,591,616,619,622,625,628,631,651,654,657,659,663,666,669,672,675,707,710,713,736,741,743,747,750,753,756,759,794,797,800,802,807,810,813,817,820,846,850,853,882,885,909,912,915,917,921,924,927,931,934,966,970,973,976,1008,1011,1014,1045,1047,1051,1054,1057,1060,1065,1068,1073,1076],[13,14,15],"blockquote",{},[16,17,18,22],"p",{},[19,20,21],"strong",{},"Thesis:"," Over the next six months, AI will not eliminate technology jobs wholesale, but it will rapidly reshape them—raising expectations for individual technologists to combine AI fluency with human judgment, while forcing companies to mature their operating models, governance, data readiness, and engineering discipline to turn AI adoption into measurable business value.",[24,25,27],"h3",{"id":26},"preface","Preface",[16,29,30],{},"AI is no longer sitting at the edge of technology work. Over the next six months, it will become part of the default operating model for software teams, infrastructure groups, data teams, product teams, cybersecurity teams, and technology leadership.  The biggest shift will not be that AI “replaces developers.” The more realistic shift is that AI changes the shape of technology work: less time spent on first drafts and repetitive tasks, more time spent on review, architecture, integration, governance, domain judgment, and delivery accountability.  The next six months will be less about experimentation and more about normalization.",[32,33],"hr",{},[24,35,37],{"id":36},"prediction-1-ai-assisted-delivery-becomes-expected-not-optional","Prediction 1: AI-Assisted Delivery Becomes Expected, Not Optional",[16,39,40],{},"For technologists, using AI tools for coding, documentation, testing, analysis, and research will increasingly be treated like using source control, CI\u002FCD, or cloud tooling. It will not be impressive by itself. It will be assumed.",[16,42,43],{},"Developers, architects, analysts, QA engineers, DevOps engineers, and data professionals will be expected to know where AI helps and where it introduces risk.",[16,45,46],{},"The strongest performers will not be the people who simply generate the most code. They will be the people who can use AI to accelerate work while still protecting:",[48,49,50,54,57,60,63],"ul",{},[51,52,53],"li",{},"Quality",[51,55,56],{},"Maintainability",[51,58,59],{},"Security",[51,61,62],{},"Business context",[51,64,65],{},"Long-term system health",[16,67,68],{},"For companies, this creates a new baseline expectation: teams that do not adopt AI-assisted workflows may look slower, but teams that adopt AI without engineering discipline may create more technical debt faster.",[16,70,71],{},"The near-term advantage will go to organizations that embed AI into delivery pipelines, code review, documentation, knowledge management, and support workflows while keeping standards high.",[32,73],{},[24,75,77],{"id":76},"prediction-2-junior-technology-roles-will-change-the-most","Prediction 2: Junior Technology Roles Will Change the Most",[16,79,80],{},"Entry-level technology work has historically included tasks such as:",[48,82,83,86,89,92,95,98],{},[51,84,85],{},"Writing boilerplate code",[51,87,88],{},"Fixing simple bugs",[51,90,91],{},"Creating documentation",[51,93,94],{},"Preparing test cases",[51,96,97],{},"Researching APIs",[51,99,100],{},"Learning system patterns through repetitive implementation",[16,102,103],{},"AI now handles many of those tasks reasonably well.",[16,105,106],{},"That does not mean junior roles disappear. It means the learning path changes.",[16,108,109],{},"New technologists will need to develop judgment earlier. They will need to understand system behavior, debugging, testing, security, and domain rules rather than only producing isolated code.",[16,111,112],{},"For technologists, this means juniors should focus on becoming strong reviewers, debuggers, and explainers. They should learn to:",[48,114,115,118,121,124,127],{},[51,116,117],{},"Ask better questions",[51,119,120],{},"Validate AI output",[51,122,123],{},"Write clear acceptance criteria",[51,125,126],{},"Understand why a solution fits the business problem",[51,128,129],{},"Explain trade-offs clearly",[16,131,132],{},"For companies, this creates a training risk. If AI removes too much low-level work, organizations may accidentally remove the apprenticeship path that produces future senior engineers.",[16,134,135],{},"Companies will need intentional onboarding, including:",[48,137,138,141,144,147,150],{},[51,139,140],{},"Code-reading exercises",[51,142,143],{},"Architecture walkthroughs",[51,145,146],{},"Paired delivery",[51,148,149],{},"AI-assisted but human-reviewed learning paths",[51,151,152],{},"Clear examples of good and bad AI-generated output",[16,154,155],{},[156,157],"img",{"alt":158,"src":159},"image","\u002Farticles\u002Fimages\u002Fai_powered_development_581x281.png",[32,161],{},[24,163,165],{"id":164},"prediction-3-software-architecture-becomes-more-important-not-less","Prediction 3: Software Architecture Becomes More Important, Not Less",[16,167,168],{},"AI can generate code quickly, but it does not automatically understand a company’s:",[48,170,171,174,177,180,183,186,189],{},[51,172,173],{},"Legacy constraints",[51,175,176],{},"Data ownership boundaries",[51,178,179],{},"Regulatory obligations",[51,181,182],{},"Integration patterns",[51,184,185],{},"Operational risks",[51,187,188],{},"Client expectations",[51,190,191],{},"Long-term product strategy",[16,193,194],{},"That increases the value of architecture.",[16,196,197],{},"Over the next six months, the architecture function will become more central because teams will need guardrails for AI-generated and AI-assisted work.",[16,199,200],{},"Key questions will include:",[48,202,203,206,209,212,215,218],{},[51,204,205],{},"What patterns are approved?",[51,207,208],{},"Which AI tools can touch which code or data?",[51,210,211],{},"How do we validate generated code?",[51,213,214],{},"How do we avoid duplicative internal tools?",[51,216,217],{},"How do we manage token cost, security, and auditability?",[51,219,220],{},"How do we prevent “fast code” from becoming unmanaged software sprawl?",[16,222,223],{},"For technologists, architectural literacy becomes a differentiator. Developers who understand boundaries, observability, testability, deployment, data contracts, and threat models will get more value from AI than those who treat it as a code vending machine.",[16,225,226],{},"For companies, the prediction is clear: AI will amplify existing engineering maturity.",[16,228,229],{},"Strong engineering organizations will get faster. Weakly governed organizations will create more fragmentation.",[16,231,232],{},[156,233],{"alt":158,"src":234},"\u002Farticles\u002Fimages\u002Fjudgment_beyond_automation_581x281.png",[32,236],{},[24,238,240],{"id":239},"prediction-4-productivity-gains-will-be-real-but-uneven","Prediction 4: Productivity Gains Will Be Real, but Uneven",[16,242,243],{},"AI will improve productivity in many technology tasks, especially when the work is bounded, well-specified, and easy to validate.",[16,245,246],{},"Examples include:",[48,248,249,252,255,258,261,264,267,270,273],{},[51,250,251],{},"Unit test generation",[51,253,254],{},"Documentation drafts",[51,256,257],{},"Code explanation",[51,259,260],{},"Migration scaffolding",[51,262,263],{},"Log analysis",[51,265,266],{},"Data transformation",[51,268,269],{},"API client generation",[51,271,272],{},"First-pass automation scripts",[51,274,275],{},"Release note generation",[16,277,278],{},"But the gains will not be uniform.",[16,280,281],{},"AI performs best where the desired output is clear and reviewable. It is less reliable when the work requires deep system context, complex refactoring, security-sensitive changes, or ambiguous business rules.",[16,283,284],{},"For technologists, the smart approach is selective adoption. Use AI aggressively where output can be reviewed quickly. Be cautious where the cost of being wrong is high.",[16,286,287],{},"For companies, this means measuring AI impact with engineering metrics, not anecdotes.",[16,289,290],{},"Useful measures include:",[48,292,293,296,299,302,305,308,311,314,317],{},[51,294,295],{},"Lead time",[51,297,298],{},"Deployment frequency",[51,300,301],{},"Defect escape rate",[51,303,304],{},"Review cycle time",[51,306,307],{},"Incident rate",[51,309,310],{},"Test coverage quality",[51,312,313],{},"Developer satisfaction",[51,315,316],{},"Rework",[51,318,319],{},"Support resolution time",[16,321,322],{},"Lines of code generated is the wrong metric.",[32,324],{},[24,326,328],{"id":327},"prediction-5-prompting-becomes-less-important-than-workflow-design","Prediction 5: “Prompting” Becomes Less Important Than Workflow Design",[16,330,331],{},"In the early wave of generative AI, many teams focused on prompt engineering. Over the next six months, the bigger differentiator will be workflow engineering.",[16,333,334],{},"The value will come from integrating AI into repeatable delivery flows, such as:",[48,336,337,340,343,346,349,352,355,358,361],{},[51,338,339],{},"Requirements refinement",[51,341,342],{},"Backlog grooming",[51,344,345],{},"Architecture decision records",[51,347,348],{},"Code review assistance",[51,350,351],{},"Test generation",[51,353,354],{},"Release notes",[51,356,357],{},"Incident summaries",[51,359,360],{},"Customer support triage",[51,362,363],{},"Knowledge-base maintenance",[16,365,366],{},"For technologists, the useful skill is not writing clever prompts in isolation. It is decomposing work, supplying context, checking output, and chaining AI into a reliable process.",[16,368,369],{},"The best AI users will behave like technical leads:",[48,371,372,375,378,381,384,387],{},[51,373,374],{},"Define the task",[51,376,377],{},"Constrain the solution",[51,379,380],{},"Provide relevant context",[51,382,383],{},"Review the output",[51,385,386],{},"Decide what is acceptable",[51,388,389],{},"Capture reusable patterns for the team",[16,391,392],{},"For companies, AI enablement should move from “everyone try tools” to “here are approved patterns for using AI in delivery.”",[16,394,395],{},"That includes:",[48,397,398,401,404,407,410,413],{},[51,399,400],{},"Reusable prompt libraries",[51,402,403],{},"Secure tool configurations",[51,405,406],{},"Coding standards",[51,408,409],{},"Review checklists",[51,411,412],{},"Architecture templates",[51,414,415],{},"Examples of acceptable AI-assisted work",[32,417],{},[24,419,421],{"id":420},"prediction-6-qa-testing-and-security-roles-gain-influence","Prediction 6: QA, Testing, and Security Roles Gain Influence",[16,423,424],{},"As AI increases the volume and speed of code creation, validation becomes more important.",[16,426,427],{},"QA engineers, test automation specialists, security engineers, and SREs will become critical to keeping AI-assisted delivery safe.",[16,429,430],{},"AI will help teams:",[48,432,433,436,439,442,445,448,451,454],{},[51,434,435],{},"Generate tests",[51,437,438],{},"Identify edge cases",[51,440,441],{},"Summarize logs",[51,443,444],{},"Explain vulnerabilities",[51,446,447],{},"Draft remediation plans",[51,449,450],{},"Create test data",[51,452,453],{},"Review infrastructure-as-code",[51,455,456],{},"Improve documentation",[16,458,459],{},"But AI can also generate plausible-looking code with subtle defects.",[16,461,462],{},"That means quality roles will move upstream.",[16,464,465],{},"For technologists, testing skills become more valuable. Developers who can write strong automated tests, reason about edge cases, and validate generated output will stand out.",[16,467,468],{},"Security-aware developers will be especially valuable because AI-generated code can accidentally introduce insecure patterns.",[16,470,471],{},"For companies, expect more investment in automated quality gates, including:",[48,473,474,477,480,483,486,489,492,495],{},[51,475,476],{},"Static analysis",[51,478,479],{},"Dependency scanning",[51,481,482],{},"Secrets detection",[51,484,485],{},"Policy-as-code",[51,487,488],{},"Regression testing",[51,490,491],{},"Observability",[51,493,494],{},"Threat modeling",[51,496,497],{},"Secure coding standards",[16,499,500],{},[156,501],{"alt":158,"src":502},"\u002Farticles\u002Fimages\u002Fqa_testing_security_roles_gain_influence_581x281.png",[32,504],{},[24,506,508],{"id":507},"prediction-7-data-and-integration-work-become-bottlenecks","Prediction 7: Data and Integration Work Become Bottlenecks",[16,510,511],{},"Many companies will discover that their AI ambitions are limited less by model capability and more by data readiness.",[16,513,514],{},"Common blockers will include:",[48,516,517,520,523,526,529,532,535,538],{},[51,518,519],{},"Poor data quality",[51,521,522],{},"Unclear data ownership",[51,524,525],{},"Inconsistent metadata",[51,527,528],{},"Disconnected systems",[51,530,531],{},"Weak access controls",[51,533,534],{},"Limited API availability",[51,536,537],{},"Lack of searchable internal knowledge",[51,539,540],{},"Unclear retention and compliance rules",[16,542,543],{},"For technologists, this means data engineering, integration architecture, API design, identity, permissions, and knowledge management become high-value skills.",[16,545,546],{},"AI solutions need reliable context. Without trusted data pipelines and governed access, AI tools produce shallow or risky results.",[16,548,549],{},"For companies, the next six months should include serious investment in data foundations.",[16,551,552],{},"That does not necessarily mean massive enterprise data programs. It means practical steps:",[48,554,555,558,561,564,567,570,573,576],{},[51,556,557],{},"Catalog important data sources",[51,559,560],{},"Define ownership",[51,562,563],{},"Improve metadata",[51,565,566],{},"Clean high-value datasets",[51,568,569],{},"Expose APIs",[51,571,572],{},"Build secure retrieval patterns for AI use cases",[51,574,575],{},"Establish access controls",[51,577,578],{},"Monitor data quality",[32,580],{},[24,582,584],{"id":583},"prediction-8-technology-managers-will-be-judged-on-adoption-discipline","Prediction 8: Technology Managers Will Be Judged on Adoption Discipline",[16,586,587],{},"Managers will not only be asked whether their teams are using AI.",[16,589,590],{},"They will be asked whether AI is improving:",[48,592,593,596,598,601,604,607,610,613],{},[51,594,595],{},"Delivery speed",[51,597,53],{},[51,599,600],{},"Customer responsiveness",[51,602,603],{},"Operational cost",[51,605,606],{},"Employee effectiveness",[51,608,609],{},"Knowledge sharing",[51,611,612],{},"Support resolution",[51,614,615],{},"Risk management",[16,617,618],{},"This is where many organizations will struggle.",[16,620,621],{},"AI adoption should not be managed as a tool rollout alone. It should be managed as a change in how work gets done.",[16,623,624],{},"For technologists, this means AI adoption should be connected to outcomes.",[16,626,627],{},"“I used AI” is not enough.",[16,629,630],{},"Better examples include:",[48,632,633,636,639,642,645,648],{},[51,634,635],{},"“I reduced test-writing time.”",[51,637,638],{},"“I improved incident summarization.”",[51,640,641],{},"“I cut review preparation time.”",[51,643,644],{},"“I created a reusable pattern the team can use.”",[51,646,647],{},"“I reduced support triage effort.”",[51,649,650],{},"“I improved documentation quality.”",[16,652,653],{},"For companies, AI governance must balance enablement and control.",[16,655,656],{},"Too much restriction will push teams into shadow AI. Too little control will create security, compliance, IP, and quality risks.",[32,658],{},[24,660,662],{"id":661},"prediction-9-the-most-valuable-technologists-become-ai-amplified-generalists-with-deep-judgment","Prediction 9: The Most Valuable Technologists Become AI-Amplified Generalists with Deep Judgment",[16,664,665],{},"The next six months will reward people who can cross boundaries.",[16,667,668],{},"A developer who understands cloud, security, data, business process, and AI-assisted delivery will be more valuable than a developer who only writes code from tickets.",[16,670,671],{},"An architect who can translate AI capability into delivery patterns, governance, and client value will be more valuable than one who only evaluates tools.",[16,673,674],{},"For technologists, the durable skills are:",[48,676,677,680,683,686,689,692,695,698,701,704],{},[51,678,679],{},"Technical judgment",[51,681,682],{},"System design",[51,684,685],{},"Debugging",[51,687,688],{},"Security awareness",[51,690,691],{},"Domain understanding",[51,693,694],{},"Clear communication",[51,696,697],{},"Data literacy",[51,699,700],{},"Ability to validate AI-generated output",[51,702,703],{},"Ability to explain risk to non-technical stakeholders",[51,705,706],{},"Ability to turn experiments into repeatable workflows",[16,708,709],{},"For companies, this means career paths and performance reviews need to evolve.",[16,711,712],{},"Reward people who:",[48,714,715,718,721,724,727,730,733],{},[51,716,717],{},"Create reusable patterns",[51,719,720],{},"Improve team throughput",[51,722,723],{},"Reduce risk",[51,725,726],{},"Teach others how to use AI responsibly",[51,728,729],{},"Improve delivery consistency",[51,731,732],{},"Strengthen engineering standards",[51,734,735],{},"Connect AI adoption to business outcomes",[16,737,738],{},[156,739],{"alt":158,"src":740},"\u002Farticles\u002Fimages\u002Fai_amplified_generalists_no_text_581x281.png",[32,742],{},[24,744,746],{"id":745},"prediction-10-companies-will-shift-from-ai-pilots-to-ai-operating-models","Prediction 10: Companies Will Shift from AI Pilots to AI Operating Models",[16,748,749],{},"The next six months will expose the difference between companies experimenting with AI and companies operationalizing it.",[16,751,752],{},"A pilot proves that AI can do something.",[16,754,755],{},"An operating model proves that AI can be used repeatedly, securely, measurably, and economically.",[16,757,758],{},"Companies will need answers to practical questions:",[48,760,761,764,767,770,773,776,779,782,785,788,791],{},[51,762,763],{},"Which tools are approved?",[51,765,766],{},"What data can be used?",[51,768,769],{},"How are outputs reviewed?",[51,771,772],{},"Who owns AI-generated defects?",[51,774,775],{},"How are costs tracked?",[51,777,778],{},"How are employees trained?",[51,780,781],{},"How are clients informed?",[51,783,784],{},"How do we prevent confidential data exposure?",[51,786,787],{},"How do we measure productivity without encouraging bad behavior?",[51,789,790],{},"How do we retire failed experiments?",[51,792,793],{},"How do we reuse successful patterns?",[16,795,796],{},"The companies that answer these questions will move faster with less risk.",[16,798,799],{},"The companies that avoid them will see fragmented adoption, inconsistent quality, and unclear ROI.",[32,801],{},[803,804,806],"h1",{"id":805},"impact-on-technologists","Impact on Technologists",[16,808,809],{},"For individual technologists, AI will raise the bar.",[16,811,812],{},"The most successful people will not be those who simply use AI the most. They will be those who use AI with discipline.",[24,814,816],{"id":815},"what-technologists-should-expect","What Technologists Should Expect",[16,818,819],{},"Technologists should expect:",[48,821,822,825,828,831,834,837,840,843],{},[51,823,824],{},"More AI-assisted coding and documentation",[51,826,827],{},"Faster expectations around first drafts",[51,829,830],{},"More emphasis on review and validation",[51,832,833],{},"Greater need to understand business context",[51,835,836],{},"More demand for security and testing awareness",[51,838,839],{},"Increased pressure to learn new tools",[51,841,842],{},"Less tolerance for repetitive manual work",[51,844,845],{},"More value placed on communication and judgment",[24,847,849],{"id":848},"what-technologists-should-do-now","What Technologists Should Do Now",[16,851,852],{},"A practical six-month development plan should include learning how to use AI for:",[48,854,855,857,859,862,865,867,870,873,876,879],{},[51,856,257],{},[51,858,351],{},[51,860,861],{},"Documentation",[51,863,864],{},"Refactoring plans",[51,866,263],{},[51,868,869],{},"API research",[51,871,872],{},"Design-option comparison",[51,874,875],{},"Query generation",[51,877,878],{},"Incident analysis",[51,880,881],{},"Release note creation",[16,883,884],{},"At the same time, technologists should strengthen the skills AI cannot reliably replace:",[48,886,887,890,892,895,897,900,903,906],{},[51,888,889],{},"Architecture",[51,891,685],{},[51,893,894],{},"Stakeholder communication",[51,896,62],{},[51,898,899],{},"Security thinking",[51,901,902],{},"Production accountability",[51,904,905],{},"Trade-off analysis",[51,907,908],{},"Team leadership",[16,910,911],{},"The goal is not to compete with AI at repetitive work.",[16,913,914],{},"The goal is to become the person who can direct, validate, and apply AI effectively.",[32,916],{},[803,918,920],{"id":919},"impact-on-companies","Impact on Companies",[16,922,923],{},"For companies, AI will create leverage only when it is paired with process, governance, and technical maturity.",[16,925,926],{},"AI should be treated as an engineering and operating-model change, not just a software procurement decision.",[24,928,930],{"id":929},"what-companies-should-expect","What Companies Should Expect",[16,932,933],{},"Companies should expect:",[48,935,936,939,942,945,948,951,954,957,960,963],{},[51,937,938],{},"Increased pressure to approve and govern AI tools",[51,940,941],{},"Higher employee expectations for AI-enabled workflows",[51,943,944],{},"Faster delivery in some areas",[51,946,947],{},"More risk of inconsistent quality if adoption is unmanaged",[51,949,950],{},"Greater need for data governance",[51,952,953],{},"More demand for security review",[51,955,956],{},"New training requirements for junior staff",[51,958,959],{},"More scrutiny around ROI",[51,961,962],{},"More client questions about AI usage",[51,964,965],{},"More internal pressure to automate repetitive work",[24,967,969],{"id":968},"what-companies-should-do-now","What Companies Should Do Now",[16,971,972],{},"Companies should focus on creating safe acceleration.",[16,974,975],{},"That means:",[48,977,978,981,984,987,990,993,996,999,1002,1005],{},[51,979,980],{},"Approve a defined set of AI tools",[51,982,983],{},"Establish clear usage policies",[51,985,986],{},"Define what data can and cannot be used",[51,988,989],{},"Create reusable engineering patterns",[51,991,992],{},"Train teams on responsible AI usage",[51,994,995],{},"Build review and validation practices",[51,997,998],{},"Measure outcomes with delivery metrics",[51,1000,1001],{},"Strengthen quality gates",[51,1003,1004],{},"Improve data readiness",[51,1006,1007],{},"Protect the junior talent pipeline",[16,1009,1010],{},"Companies should also identify high-friction workflows where AI can create measurable value quickly.",[16,1012,1013],{},"Good candidates include:",[48,1015,1016,1019,1021,1024,1027,1030,1033,1036,1039,1042],{},[51,1017,1018],{},"Test creation",[51,1020,861],{},[51,1022,1023],{},"Support triage",[51,1025,1026],{},"Code review preparation",[51,1028,1029],{},"Knowledge retrieval",[51,1031,1032],{},"Migration planning",[51,1034,1035],{},"Operational analysis",[51,1037,1038],{},"Incident reporting",[51,1040,1041],{},"Release communication",[51,1043,1044],{},"Requirements clarification",[32,1046],{},[803,1048,1050],{"id":1049},"final-take","Final Take",[16,1052,1053],{},"The next six months will not be defined by AI replacing technology teams wholesale.",[16,1055,1056],{},"They will be defined by AI separating teams that have strong engineering discipline from those that do not.",[16,1058,1059],{},"For technologists, the message is clear:",[13,1061,1062],{},[16,1063,1064],{},"Learn to work with AI, but do not outsource your judgment.",[16,1066,1067],{},"For companies, the message is equally clear:",[13,1069,1070],{},[16,1071,1072],{},"AI will create leverage only when paired with architecture, governance, data readiness, security, and measurable delivery outcomes.",[16,1074,1075],{},"The winners will not simply be the fastest adopters.",[16,1077,1078],{},"They will be the ones who combine speed with trust.",{"title":1080,"searchDepth":1081,"depth":1081,"links":1082},"",2,[1083,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098],{"id":26,"depth":1084,"text":27},3,{"id":36,"depth":1084,"text":37},{"id":76,"depth":1084,"text":77},{"id":164,"depth":1084,"text":165},{"id":239,"depth":1084,"text":240},{"id":327,"depth":1084,"text":328},{"id":420,"depth":1084,"text":421},{"id":507,"depth":1084,"text":508},{"id":583,"depth":1084,"text":584},{"id":661,"depth":1084,"text":662},{"id":745,"depth":1084,"text":746},{"id":815,"depth":1084,"text":816},{"id":848,"depth":1084,"text":849},{"id":929,"depth":1084,"text":930},{"id":968,"depth":1084,"text":969},"2026-06-15","AI is starting to show up in the everyday work of technology teams—not as a distant trend, but as something changing how people write code, solve problems, make decisions, and deliver value. Over the next six months, the biggest advantage will go to the people and companies that learn how to use AI thoughtfully: moving faster without losing judgment, quality, or trust. This article looks at what that shift may mean for technologists, leaders, and the organizations trying to keep pace.","md","\u002Farticles\u002Fimages\u002Fai_technology_jobs_next_6_months_header_581x281.png",{},true,"\u002Farticles\u002F2026_06_ai_predictions_1",{"title":7,"description":1100},"articles\u002F2026_06_AI_Predictions_1",[1109,1110],"business","technology","l7S_ZBBTYj5jNNI7nMr8VS3LQJN9_YhMEjghBM-XyLA",{"id":1113,"title":1114,"author":8,"body":1115,"createdAt":1903,"description":1904,"extension":1101,"img":1905,"meta":1906,"navigation":1104,"path":1907,"seo":1908,"stem":1909,"tags":1910,"updatedAt":1903,"__hash__":1911},"articles\u002Farticles\u002F2026_02_VibeCodingToEnterprise.md","Vibe Coding to Enterprise Explaining Benefits, Limits, and the Path to a Maintainable Platform",{"type":10,"value":1116,"toc":1891},[1117,1120,1136,1149,1152,1163,1166,1168,1170,1172,1176,1179,1186,1189,1209,1212,1214,1216,1218,1222,1226,1232,1237,1254,1259,1273,1277,1282,1286,1300,1304,1318,1327,1334,1336,1338,1340,1344,1347,1367,1374,1378,1381,1395,1398,1402,1405,1419,1423,1426,1431,1447,1449,1451,1453,1457,1460,1498,1504,1506,1508,1510,1514,1517,1521,1526,1537,1543,1547,1552,1556,1573,1578,1582,1586,1606,1611,1618,1620,1622,1624,1628,1631,1638,1641,1655,1659,1703,1705,1707,1709,1713,1717,1728,1732,1749,1751,1753,1755,1759,1763,1774,1778,1795,1799,1816,1818,1820,1824,1829,1846,1851,1868,1870,1872,1874,1878,1881,1884],[1118,1119],"br",{},[13,1121,1122],{},[16,1123,1124,1126,1127,1131,1132,1135],{},[19,1125,21],{}," Vibe coding optimizes for ",[1128,1129,1130],"em",{},"speed of learning",". Enterprise engineering optimizes for ",[1128,1133,1134],{},"longevity and risk control",". The best teams use both deliberately.",[16,1137,1138],{},[1139,1140,1143],"a",{"href":1141,"target":1142},"\u002Farticles\u002Fimages\u002Fstructure_a1.png","_blank",[156,1144],{"style":1145,"title":158,"src":1146,"alt":158,"width":1147,"height":1148},"display: inline;","\u002Farticles\u002Fimages\u002Fvibe2.png",580,281,[1150,1151,27],"h4",{"id":26},[16,1153,1154,1155,1158,1159,1162],{},"In both industry and academia, I’ve seen the same pattern repeat: teams move fastest when they can ",[19,1156,1157],{},"reduce ambiguity early"," and ",[19,1160,1161],{},"engineer durability later","—but they struggle when they conflate those two phases.",[16,1164,1165],{},"Vibe-coded applications are an excellent instrument for rapid discovery and alignment. Enterprise platforms are an instrument for longevity, governable risk, and predictable change. This article is written to help managers and technical leaders use each tool deliberately, and to avoid the costly mistake of promoting a prototype into production without a disciplined transition.",[1118,1167],{},[32,1169],{},[1118,1171],{},[24,1173,1175],{"id":1174},"why-this-article-exists","Why this article exists",[16,1177,1178],{},"Vibe-coded applications can feel magical: in days, you can demonstrate a working flow, a UI, and a believable end-to-end experience. That speed is real, and it creates value.",[16,1180,1181,1182,1185],{},"But the same thing that makes vibe coding powerful—optimizing for rapid learning—also means the result is ",[19,1183,1184],{},"not automatically"," an enterprise-ready platform. A great demo does not guarantee maintainability, security, compliance, reliability, or operability.",[16,1187,1188],{},"This article offers a practical mental model:",[48,1190,1191,1201],{},[51,1192,1193,1196,1197,1200],{},[19,1194,1195],{},"Vibe coding"," is a ",[1128,1198,1199],{},"learning engine",".",[51,1202,1203,1196,1206,1200],{},[19,1204,1205],{},"Enterprise software",[1128,1207,1208],{},"longevity and risk-control engine",[16,1210,1211],{},"The best outcomes come when we use each intentionally.",[1118,1213],{},[32,1215],{},[1118,1217],{},[24,1219,1221],{"id":1220},"the-manager-friendly-model-two-lanes","The manager-friendly model: two lanes",[1150,1223,1225],{"id":1224},"lane-a-vibe-coding-speed-of-learning","Lane A — Vibe coding (speed of learning)",[16,1227,1228,1231],{},[19,1229,1230],{},"Goal:"," reduce uncertainty quickly.",[16,1233,1234],{},[19,1235,1236],{},"Best for:",[48,1238,1239,1242,1245,1248,1251],{},[51,1240,1241],{},"validating a workflow",[51,1243,1244],{},"clarifying requirements",[51,1246,1247],{},"aligning stakeholders",[51,1249,1250],{},"testing usability",[51,1252,1253],{},"proving value and ROI potential",[16,1255,1256],{},[19,1257,1258],{},"Success looks like:",[48,1260,1261,1264,1267,1270],{},[51,1262,1263],{},"faster clarity",[51,1265,1266],{},"fewer misinterpretations",[51,1268,1269],{},"visible progress",[51,1271,1272],{},"early user feedback",[1150,1274,1276],{"id":1275},"lane-b-enterprise-engineering-durable-delivery","Lane B — Enterprise engineering (durable delivery)",[16,1278,1279,1281],{},[19,1280,1230],{}," create a maintainable, secure, observable system.",[16,1283,1284],{},[19,1285,1236],{},[48,1287,1288,1291,1294,1297],{},[51,1289,1290],{},"predictable change over time",[51,1292,1293],{},"controlling security\u002Fcompliance risk",[51,1295,1296],{},"reliable deployments and support",[51,1298,1299],{},"integration, scale, and operational ownership",[16,1301,1302],{},[19,1303,1258],{},[48,1305,1306,1309,1312,1315],{},[51,1307,1308],{},"stable releases",[51,1310,1311],{},"low defect escape rate",[51,1313,1314],{},"clear ownership and support",[51,1316,1317],{},"measured risk and controls",[16,1319,1320,1323,1324,1200],{},[19,1321,1322],{},"Key point:"," Lane A is not “less professional.” It is professional ",[19,1325,1326],{},"for a different outcome",[16,1328,1329],{},[1139,1330,1331],{"href":1141,"target":1142},[156,1332],{"style":1145,"title":158,"src":1333,"alt":158,"width":1147,"height":1148},"\u002Farticles\u002Fimages\u002Fvibe3.png",[1118,1335],{},[32,1337],{},[1118,1339],{},[24,1341,1343],{"id":1342},"vibe-apps-as-a-communication-instrument","Vibe apps as a communication instrument",[16,1345,1346],{},"One of the most underappreciated advantages of vibe coding is that it creates a shared language between:",[48,1348,1349,1356,1362],{},[51,1350,1351,1352,1355],{},"the ",[19,1353,1354],{},"viber"," (fast builder\u002Fexplorer),",[51,1357,1351,1358,1361],{},[19,1359,1360],{},"engineering team",", and",[51,1363,1364,1200],{},[19,1365,1366],{},"stakeholders\u002Fusers",[16,1368,1369,1370,1373],{},"In educational terms, the vibe-coded app functions as a ",[19,1371,1372],{},"high-fidelity teaching artifact",": it makes abstract requirements concrete, exposes misconceptions quickly, and improves the quality of feedback.",[1150,1375,1377],{"id":1376},"_1-it-converts-words-into-workflow","1) It converts “words” into “workflow”",[16,1379,1380],{},"Instead of debating what a requirement “means,” everyone can click through:",[48,1382,1383,1386,1389,1392],{},[51,1384,1385],{},"screens",[51,1387,1388],{},"buttons",[51,1390,1391],{},"sequences",[51,1393,1394],{},"outputs",[16,1396,1397],{},"Misunderstandings become visible in minutes rather than in late-stage rework.",[1150,1399,1401],{"id":1400},"_2-it-reveals-edge-cases-and-implicit-requirements","2) It reveals edge cases and implicit requirements",[16,1403,1404],{},"A prototype surfaces what written requirements often omit:",[48,1406,1407,1410,1413,1416],{},[51,1408,1409],{},"missing states (blank inputs, partial data)",[51,1411,1412],{},"failure modes (slow APIs, timeouts)",[51,1414,1415],{},"data dependencies (where identifiers come from)",[51,1417,1418],{},"role differences (admin vs standard user)",[1150,1420,1422],{"id":1421},"_3-it-reduces-churn-and-translation-cost","3) It reduces churn and translation cost",[16,1424,1425],{},"Engineering effort shifts from interpreting ambiguity to building a clean, reliable implementation of a validated experience.",[16,1427,1428],{},[19,1429,1430],{},"Important distinction:",[48,1432,1433,1440],{},[51,1434,1435,1436,1439],{},"The vibe app is an excellent ",[19,1437,1438],{},"communication artifact"," (“this is what we mean”).",[51,1441,1442,1443,1446],{},"Enterprise engineering produces the ",[19,1444,1445],{},"delivery artifact"," (“this is how we can operate and evolve it responsibly”).",[1118,1448],{},[32,1450],{},[1118,1452],{},[24,1454,1456],{"id":1455},"the-pitfall-confusing-a-prototype-with-a-platform","The pitfall: confusing a prototype with a platform",[16,1458,1459],{},"These risks are not moral failures—they’re predictable outcomes of optimizing for speed:",[48,1461,1462,1468,1474,1480,1486,1492],{},[51,1463,1464,1467],{},[19,1465,1466],{},"Demo debt becomes operational debt"," when prototypes ship without hardening.",[51,1469,1470,1473],{},[19,1471,1472],{},"Security posture is unknown"," (secrets in code, permissive auth, risky dependencies).",[51,1475,1476,1479],{},[19,1477,1478],{},"Maintainability degrades quickly"," (tight coupling, inconsistent patterns).",[51,1481,1482,1485],{},[19,1483,1484],{},"Support and ownership are unclear"," (who diagnoses and resolves failures?).",[51,1487,1488,1491],{},[19,1489,1490],{},"Data risks appear late"," (PII exposure, retention, audit needs).",[51,1493,1494,1497],{},[19,1495,1496],{},"Scaling surprises"," arise when real usage grows.",[16,1499,1500,1501,1200],{},"A manager does not need to fear vibe coding. They need to avoid ",[19,1502,1503],{},"accidentally promoting the wrong artifact to production",[1118,1505],{},[32,1507],{},[1118,1509],{},[24,1511,1513],{"id":1512},"the-bridge-from-vibe-app-to-enterprise-ready-solution","The bridge: from vibe app to enterprise-ready solution",[16,1515,1516],{},"Treat the transition as a deliberate set of stages with explicit definitions of done.",[1150,1518,1520],{"id":1519},"stage-0-vibe-prototype-15-days","Stage 0: Vibe prototype (1–5 days)",[16,1522,1523],{},[19,1524,1525],{},"Deliverables:",[48,1527,1528,1531,1534],{},[51,1529,1530],{},"working demo flow (happy path)",[51,1532,1533],{},"list of assumptions tested and validated",[51,1535,1536],{},"list of known gaps and risks",[16,1538,1539,1542],{},[19,1540,1541],{},"Decision:"," Is this worth investing in?",[1150,1544,1546],{"id":1545},"stage-1-pilot-ready-thin-slice-24-weeks","Stage 1: Pilot-ready thin slice (2–4 weeks)",[16,1548,1549,1551],{},[19,1550,1230],{}," limited users, controlled scope.",[16,1553,1554],{},[19,1555,1525],{},[48,1557,1558,1561,1564,1567,1570],{},[51,1559,1560],{},"baseline authentication and role model (least privilege)",[51,1562,1563],{},"CI pipeline + repeatable deploy",[51,1565,1566],{},"basic tests around critical flows",[51,1568,1569],{},"logging + error handling conventions",[51,1571,1572],{},"first architecture refactor: boundaries and seams",[16,1574,1575,1577],{},[19,1576,1541],{}," Are users adopting it enough to justify hardening?",[1150,1579,1581],{"id":1580},"stage-2-enterprise-hardening-412-weeks-depending-on-scope","Stage 2: Enterprise hardening (4–12+ weeks depending on scope)",[16,1583,1584],{},[19,1585,1525],{},[48,1587,1588,1591,1594,1597,1600,1603],{},[51,1589,1590],{},"clear architecture (modules\u002Fbounded contexts, contracts)",[51,1592,1593],{},"security posture (threat model, secrets, SAST\u002FDAST, dependency policy)",[51,1595,1596],{},"observability (metrics\u002Flogs\u002Ftraces, alerts, dashboards)",[51,1598,1599],{},"resilience (idempotency, retries, rate limiting, failure isolation)",[51,1601,1602],{},"data governance (PII handling, retention, audit)",[51,1604,1605],{},"runbooks + ownership model",[16,1607,1608,1610],{},[19,1609,1541],{}," Can we operate and evolve this safely and predictably?",[16,1612,1613],{},[1139,1614,1615],{"href":1141,"target":1142},[156,1616],{"style":1145,"title":158,"src":1617,"alt":158,"width":1147,"height":1148},"\u002Farticles\u002Fimages\u002Fvibe4.png",[1118,1619],{},[32,1621],{},[1118,1623],{},[24,1625,1627],{"id":1626},"maintainable-code-the-centerpiece","Maintainable code: the centerpiece",[16,1629,1630],{},"A manager-friendly definition:",[13,1632,1633],{},[16,1634,1635],{},[19,1636,1637],{},"Maintainable code means change is predictable.",[16,1639,1640],{},"Maintainability is not aesthetic style. It is an operational property reflected in outcomes:",[48,1642,1643,1646,1649,1652],{},[51,1644,1645],{},"new features do not routinely break old ones",[51,1647,1648],{},"defects are diagnosable and localized",[51,1650,1651],{},"onboarding does not require extensive tribal knowledge",[51,1653,1654],{},"releases are routine rather than heroic",[1150,1656,1658],{"id":1657},"what-buys-maintainability-high-impact","What buys maintainability (high impact)",[48,1660,1661,1667,1673,1679,1685,1691,1697],{},[51,1662,1663,1666],{},[19,1664,1665],{},"Clear boundaries:"," components\u002Fservices with explicit responsibilities",[51,1668,1669,1672],{},[19,1670,1671],{},"Dependency direction:"," core domain does not depend on UI\u002Finfrastructure",[51,1674,1675,1678],{},[19,1676,1677],{},"Consistent patterns:"," one approach to validation, errors, logging",[51,1680,1681,1684],{},[19,1682,1683],{},"Tests where change happens:"," business rules and contracts first",[51,1686,1687,1690],{},[19,1688,1689],{},"Configuration discipline:"," environments are reproducible",[51,1692,1693,1696],{},[19,1694,1695],{},"Code review standards:"," readability and changeability > cleverness",[51,1698,1699,1702],{},[19,1700,1701],{},"Decision records (TDRs):"," short notes explaining why choices were made",[1118,1704],{},[32,1706],{},[1118,1708],{},[24,1710,1712],{"id":1711},"resources-and-roles","Resources and roles",[1150,1714,1716],{"id":1715},"for-a-vibe-app","For a vibe app",[48,1718,1719,1722,1725],{},[51,1720,1721],{},"1 viber\u002Fbuilder",[51,1723,1724],{},"1 product partner (PM or proxy user)",[51,1726,1727],{},"2–5 users for rapid feedback",[1150,1729,1731],{"id":1730},"for-enterprise-readiness","For enterprise readiness",[48,1733,1734,1737,1740,1743,1746],{},[51,1735,1736],{},"tech lead\u002Farchitect (boundaries, risk decisions)",[51,1738,1739],{},"1–3 engineers (scope dependent)",[51,1741,1742],{},"security input (part-time, early)",[51,1744,1745],{},"DevOps\u002Fplatform support (pipelines, environments, monitoring)",[51,1747,1748],{},"testing mindset embedded in the team",[1118,1750],{},[32,1752],{},[1118,1754],{},[24,1756,1758],{"id":1757},"a-practical-schedule-you-can-share","A practical schedule you can share",[1150,1760,1762],{"id":1761},"week-1-validate-value-vibe","Week 1: Validate value (vibe)",[48,1764,1765,1768,1771],{},[51,1766,1767],{},"build end-to-end happy path",[51,1769,1770],{},"daily feedback loop with users",[51,1772,1773],{},"capture the hardening backlog continuously",[1150,1775,1777],{"id":1776},"week-23-stabilize-for-pilot","Week 2–3: Stabilize for pilot",[48,1779,1780,1783,1786,1789,1792],{},[51,1781,1782],{},"modularize the codebase (seams and interfaces)",[51,1784,1785],{},"add tests for critical flows and business rules",[51,1787,1788],{},"add CI\u002FCD and secrets management",[51,1790,1791],{},"implement baseline auth and roles",[51,1793,1794],{},"add logging and error handling conventions",[1150,1796,1798],{"id":1797},"week-46-production-slice","Week 4–6: Production slice",[48,1800,1801,1804,1807,1810,1813],{},[51,1802,1803],{},"threat model + security scanning + dependency policy",[51,1805,1806],{},"observability + alerts + dashboards",[51,1808,1809],{},"data governance (PII rules, retention, audit)",[51,1811,1812],{},"performance tests against expected usage",[51,1814,1815],{},"runbooks + operational ownership",[1118,1817],{},[1118,1819],{},[24,1821,1823],{"id":1822},"prototype-to-product-handoff-communication-preserved-risk-reduced","Prototype-to-Product handoff (communication preserved, risk reduced)",[16,1825,1826],{},[19,1827,1828],{},"Viber hands engineering:",[48,1830,1831,1834,1837,1840,1843],{},[51,1832,1833],{},"demo flow + prioritized tasks",[51,1835,1836],{},"top edge cases discovered",[51,1838,1839],{},"data sources + sample data",[51,1841,1842],{},"decision trail: what changed and why",[51,1844,1845],{},"risk list (security, scale, integrations)",[16,1847,1848],{},[19,1849,1850],{},"Engineering produces:",[48,1852,1853,1856,1859,1862,1865],{},[51,1854,1855],{},"architecture plan and boundaries",[51,1857,1858],{},"hardening backlog with estimates",[51,1860,1861],{},"test strategy",[51,1863,1864],{},"CI\u002FCD + environments",[51,1866,1867],{},"security and operational controls",[1118,1869],{},[32,1871],{},[1118,1873],{},[24,1875,1877],{"id":1876},"closing","Closing",[16,1879,1880],{},"Vibe coding is a disciplined way to learn quickly, align stakeholders, and communicate intent. It accelerates clarity.",[16,1882,1883],{},"Enterprise engineering is how we translate that clarity into a maintainable, secure, operable platform.",[16,1885,1886,1887,1890],{},"When we treat the vibe app as a validated reference model—and then deliberately professionalize it—we get the best of both worlds: speed ",[19,1888,1889],{},"and"," sustainability.",{"title":1080,"searchDepth":1081,"depth":1081,"links":1892},[1893,1894,1895,1896,1897,1898,1899,1900,1901,1902],{"id":1174,"depth":1084,"text":1175},{"id":1220,"depth":1084,"text":1221},{"id":1342,"depth":1084,"text":1343},{"id":1455,"depth":1084,"text":1456},{"id":1512,"depth":1084,"text":1513},{"id":1626,"depth":1084,"text":1627},{"id":1711,"depth":1084,"text":1712},{"id":1757,"depth":1084,"text":1758},{"id":1822,"depth":1084,"text":1823},{"id":1876,"depth":1084,"text":1877},"2026-02-19","Vibe-coded apps are a fast way to reduce ambiguity and align stakeholders because they turn requirements into a concrete, clickable workflow that acts as a shared communication tool between the viber and the engineering team; however, a compelling prototype is not the same as an enterprise-ready platform. The article explains how to deliberately transition from a vibe prototype to a maintainable, secure, operable solution through staged gates (prototype → pilot thin-slice → enterprise hardening), clarifying the roles, schedule, and engineering practices that make “change predictable” over time—clear boundaries, consistent patterns, targeted tests, CI\u002FCD, secrets management, observability, and explicit operational ownership.","\u002Farticles\u002Fimages\u002Fvibe1.png",{},"\u002Farticles\u002F2026_02_vibecodingtoenterprise",{"title":1114,"description":1904},"articles\u002F2026_02_VibeCodingToEnterprise",[1109,1110],"JjUIJblmwkBWdi9-1pKqoynzrSOjbjcjUTKJtknbuXQ",{"id":1913,"title":1914,"author":1915,"body":1916,"createdAt":2358,"description":2359,"extension":1101,"img":1941,"meta":2360,"navigation":1104,"path":2362,"seo":2363,"stem":2364,"tags":2365,"updatedAt":2358,"__hash__":2366},"articles\u002Farticles\u002F2025_11_09_AzureContainerAzureInstance.md","Azure Container Instances vs Azure Container Apps",null,{"type":10,"value":1917,"toc":2344},[1918,1920,1924,1934,1943,1945,1947,1952,1955,1970,1973,1996,1998,2000,2004,2011,2013,2118,2120,2122,2126,2133,2135,2173,2175,2177,2181,2192,2194,2196,2200,2220,2222,2224,2228,2231,2241,2243,2245,2249,2276,2278,2280,2284],[1118,1919],{},[24,1921,1923],{"id":1922},"azure-container-instances-aci-vs-azure-container-apps-aca","Azure Container Instances (ACI) vs Azure Container Apps (ACA)",[16,1925,1926,1927,1158,1930,1933],{},"A detailed comparison between ",[19,1928,1929],{},"Azure Container Instances (ACI)",[19,1931,1932],{},"Azure Container Apps (ACA)"," — from a software‑architect perspective.",[16,1935,1936],{},[1139,1937,1939],{"href":1938,"target":1142},"\u002Farticles\u002Fimages\u002Fembracing1.png",[156,1940],{"style":1145,"title":158,"src":1941,"alt":158,"width":1942,"height":1148},"\u002Farticles\u002Fimages\u002Faci_2_docker.jpg",581,[32,1944],{},[1118,1946],{},[1948,1949,1951],"h2",{"id":1950},"what-they-are","What They Are",[24,1953,1929],{"id":1954},"azure-container-instances-aci",[48,1956,1957,1964,1967],{},[51,1958,1959,1960,1963],{},"The ",[1128,1961,1962],{},"simplest"," way in Azure to run a container (or a container group) without managing VMs or orchestrators.",[51,1965,1966],{},"You specify an image, CPU\u002Fmemory, optional network, and Azure runs it.",[51,1968,1969],{},"Typically used for ad‑hoc tasks, burst jobs, simple container workloads.",[24,1971,1932],{"id":1972},"azure-container-apps-aca",[48,1974,1975,1990,1993],{},[51,1976,1977,1978,1981,1982,1985,1986,1989],{},"A ",[1128,1979,1980],{},"serverless container platform"," built on Kubernetes technologies (abstracted) with added features like autoscaling (via ",[19,1983,1984],{},"KEDA",") and service‑to‑service communication (via ",[19,1987,1988],{},"Dapr",").",[51,1991,1992],{},"Built for microservices and event‑driven workloads.",[51,1994,1995],{},"You deploy containers (or sets of containers) as “apps” with revisions, traffic splitting, and environments.",[32,1997],{},[1118,1999],{},[24,2001,2003],{"id":2002},"key-differences","Key Differences",[16,2005,2006],{},[1139,2007,2008],{"href":1938,"target":1142},[156,2009],{"style":1145,"title":158,"src":2010,"alt":158,"width":1942,"height":1148},"\u002Farticles\u002Fimages\u002Faci_1.jpg",[1118,2012],{},[2014,2015,2016,2036],"table",{},[2017,2018,2019],"thead",{},[2020,2021,2022,2028,2032],"tr",{},[2023,2024,2025],"th",{},[19,2026,2027],{},"Dimension",[2023,2029,2030],{},[19,2031,1929],{},[2023,2033,2034],{},[19,2035,1932],{},[2037,2038,2039,2053,2066,2079,2092,2105],"tbody",{},[2020,2040,2041,2047,2050],{},[2042,2043,2044],"td",{},[19,2045,2046],{},"Operational Overhead",[2042,2048,2049],{},"Extremely low; no orchestration or node management.",[2042,2051,2052],{},"Low‑moderate; no Kubernetes management but supports autoscaling, environments, and services.",[2020,2054,2055,2060,2063],{},[2042,2056,2057],{},[19,2058,2059],{},"Scaling \u002F Autoscaling",[2042,2061,2062],{},"Manual; no built‑in horizontal autoscaling.",[2042,2064,2065],{},"Built‑in autoscaling (KEDA) and scale‑to‑zero for cost efficiency.",[2020,2067,2068,2073,2076],{},[2042,2069,2070],{},[19,2071,2072],{},"Use Case Fit",[2042,2074,2075],{},"Short‑lived, ad‑hoc, batch, or simple workloads.",[2042,2077,2078],{},"Microservices, APIs, event‑driven workloads with autoscaling and communication.",[2020,2080,2081,2086,2089],{},[2042,2082,2083],{},[19,2084,2085],{},"Networking \u002F Complexity",[2042,2087,2088],{},"Simple networking; limited orchestration.",[2042,2090,2091],{},"Supports service discovery, ingress, revisions, event triggers, traffic control.",[2020,2093,2094,2099,2102],{},[2042,2095,2096],{},[19,2097,2098],{},"Control vs Abstraction",[2042,2100,2101],{},"Minimal control, maximum simplicity.",[2042,2103,2104],{},"Balanced control; advanced features but abstracted cluster.",[2020,2106,2107,2112,2115],{},[2042,2108,2109],{},[19,2110,2111],{},"Cost Model",[2042,2113,2114],{},"Pay‑per‑second for runtime; can be costly for 24\u002F7 workloads.",[2042,2116,2117],{},"Efficient for variable workloads; scale‑to‑zero saves idle cost.",[32,2119],{},[1118,2121],{},[24,2123,2125],{"id":2124},"architectural-nuances","Architectural Nuances",[16,2127,2128],{},[1139,2129,2130],{"href":1938,"target":1142},[156,2131],{"style":1145,"title":158,"src":2132,"alt":158,"width":1942,"height":1148},"\u002Farticles\u002Fimages\u002Faci_3.jpg",[1118,2134],{},[48,2136,2137,2143,2149,2155,2161,2167],{},[51,2138,2139,2142],{},[19,2140,2141],{},"Kubernetes Access",": ACA uses Kubernetes under the hood but doesn’t expose full cluster access (no CRDs, DaemonSets, or StatefulSets).",[51,2144,2145,2148],{},[19,2146,2147],{},"Load Balancing",": ACA includes ingress and traffic splitting; ACI needs custom configuration.",[51,2150,2151,2154],{},[19,2152,2153],{},"Cold Starts",": ACA can scale to zero (saving cost), but introduces startup latency.",[51,2156,2157,2160],{},[19,2158,2159],{},"DevOps Integration",": ACA supports revisions, deployments, and traffic routing directly from pipelines.",[51,2162,2163,2166],{},[19,2164,2165],{},"Monitoring",": ACA integrates with Azure Monitor and Log Analytics; ACI is more manual.",[51,2168,2169,2172],{},[19,2170,2171],{},"Cost Efficiency",": ACA wins for sporadic workloads; ACI wins for ultra‑short‑term jobs.",[1118,2174],{},[32,2176],{},[24,2178,2180],{"id":2179},"when-you-should-pick-one-vs-the-other","When you should pick one vs the other",[48,2182,2183,2186,2189],{},[51,2184,2185],{},"If you have a simple containerised task (e.g., a background job, processing script, transient workload) that doesn’t require autoscaling, service-mesh, microservices communication — go with ACI. It gives you minimal overhead, fast deployment, pay-per-use.",[51,2187,2188],{},"If you are building a microservices-based module, expect variable load, want autoscaling, traffic splitting (canary\u002Fblue-green), want event-driven triggers, want service discovery\u002Fcommunication — go with ACA. For example: a new API service in Echo that needs to handle spikes, scale down to zero in idle time, integrate with event grid or queues.",[51,2190,2191],{},"For your Echo product core baseline (which is established, standardised, maybe always running) and custom long-term projects where you might need full control over networking, stateful containers, complex orchestration, you might still evaluate AKS. But between ACI and ACA, ACA is likely the sweet spot for many of your microservices.",[32,2193],{},[1118,2195],{},[24,2197,2199],{"id":2198},"nuances-caveats-you-should-be-aware-of","Nuances \u002F caveats you should be aware of",[48,2201,2202,2205,2208,2211,2214,2217],{},[51,2203,2204],{},"Though ACA is built on Kubernetes technologies, you don’t get direct access to the Kubernetes API in ACA. So if you require full Kubernetes ecosystem (custom CRDs, fine-grained cluster control, advanced networking such as DaemonSets, complex storage, etc) you’ll outgrow ACA.\nServer Fault",[51,2206,2207],{},"ACI’s simplicity comes with constraints: no built-in load-balancer, no built-in autoscale, no service orchestration — if you need any of that, you’ll either manage it yourself or choose ACA\u002FAKS.\niaMachs",[51,2209,2210],{},"Cold-start \u002F scale-to-zero: In ACA you can scale to zero (which is cost-efficient) but there is some latency when scaling up from zero; is that acceptable in your customer scenario?",[51,2212,2213],{},"For your DevOps pipeline: ACA gives you opportunities to manage “revisions” and traffic splitting which align with more progressive rollout strategies (canary, blue\u002Fgreen). For ACI you would need custom logic.",[51,2215,2216],{},"Monitoring\u002Fobservability: With ACA you get more built-in ecosystem for microservices; with ACI you’ll build more “by hand”.",[51,2218,2219],{},"Cost modelling: If you have many small microservices each idle for most of the time, ACA’s scale-to-zero benefits matter. If you have containers that run 24\u002F7 at stable load, perhaps a traditional VM or AKS node-pool might give better cost-predictability.",[32,2221],{},[1118,2223],{},[24,2225,2227],{"id":2226},"a-decision-tree-for-your-architecture","A decision-tree for your architecture",[16,2229,2230],{},"Here’s a quick decision tree you can use with your team when evaluating containerised workloads for Echo or custom projects:",[2232,2233,2238],"pre",{"className":2234,"code":2236,"language":2237,"meta":1080},[2235],"language-text","1️⃣ Is the workload short-lived or triggered on-demand?\n    → Yes → Use ACI\n\n2️⃣ Does it need autoscaling, event triggers, or service communication?\n    → Yes → Use ACA\n\n3️⃣ Do you need full Kubernetes-level control?\n    → Yes → Use AKS\n    → No  → ACA likely fits best\n","text",[2239,2240,2236],"code",{"__ignoreMap":1080},[32,2242],{},[1118,2244],{},[24,2246,2248],{"id":2247},"summary","Summary",[48,2250,2251,2260,2268],{},[51,2252,2253,2256,2257],{},[19,2254,2255],{},"ACI"," = ",[1128,2258,2259],{},"Fast, simple, single‑container workloads.",[51,2261,2262,2256,2265],{},[19,2263,2264],{},"ACA",[1128,2266,2267],{},"Scalable, event‑driven microservices without managing Kubernetes.",[51,2269,2270,2256,2273],{},[19,2271,2272],{},"AKS",[1128,2274,2275],{},"Full control, full complexity.",[32,2277],{},[1118,2279],{},[24,2281,2283],{"id":2282},"recommended-strategy-for-architecture-teams","Recommended Strategy (for Architecture Teams)",[2014,2285,2286,2300],{},[2017,2287,2288],{},[2020,2289,2290,2295],{},[2023,2291,2292],{},[19,2293,2294],{},"Scenario",[2023,2296,2297],{},[19,2298,2299],{},"Recommended Service",[2037,2301,2302,2309,2316,2323,2330,2337],{},[2020,2303,2304,2307],{},[2042,2305,2306],{},"Batch jobs or background tasks",[2042,2308,2255],{},[2020,2310,2311,2314],{},[2042,2312,2313],{},"Microservices with autoscaling",[2042,2315,2264],{},[2020,2317,2318,2321],{},[2042,2319,2320],{},"Long-running stateful workloads",[2042,2322,2272],{},[2020,2324,2325,2328],{},[2042,2326,2327],{},"Event-driven APIs",[2042,2329,2264],{},[2020,2331,2332,2335],{},[2042,2333,2334],{},"Prototyping \u002F quick deployments",[2042,2336,2255],{},[2020,2338,2339,2342],{},[2042,2340,2341],{},"Canary or blue\u002Fgreen releases",[2042,2343,2264],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":2345},[2346,2347],{"id":1922,"depth":1084,"text":1923},{"id":1950,"depth":1081,"text":1951,"children":2348},[2349,2350,2351,2352,2353,2354,2355,2356,2357],{"id":1954,"depth":1084,"text":1929},{"id":1972,"depth":1084,"text":1932},{"id":2002,"depth":1084,"text":2003},{"id":2124,"depth":1084,"text":2125},{"id":2179,"depth":1084,"text":2180},{"id":2198,"depth":1084,"text":2199},{"id":2226,"depth":1084,"text":2227},{"id":2247,"depth":1084,"text":2248},{"id":2282,"depth":1084,"text":2283},"2025-11-09","Azure offers multiple container hosting options — each tailored to different operational needs and complexity levels. This article provides a practical, architect-focused comparison between Azure Container Instances  and Azure Container Apps  — covering their use cases, scaling models, cost structures, and deployment scenarios",{"name":2361},"Admin","\u002Farticles\u002F2025_11_09_azurecontainerazureinstance",{"title":1914,"description":2359},"articles\u002F2025_11_09_AzureContainerAzureInstance",[1109,1110],"U8juIh2bDOwR-Hj_jclF1nAh3zT0he8CP0YJRzFEt1M",{"id":2368,"title":2369,"author":8,"body":2370,"createdAt":2735,"description":2736,"extension":1101,"img":2737,"meta":2738,"navigation":1104,"path":2739,"seo":2740,"stem":2741,"tags":2742,"updatedAt":2735,"__hash__":2743},"articles\u002Farticles\u002F2025_09_Solution_Delivery_Models.md","Designing Solution Delivery Models That Drive Business Outcomes",{"type":10,"value":2371,"toc":2725},[2372,2374,2378,2381,2391,2393,2395,2399,2409,2429,2436,2442,2444,2446,2448,2452,2455,2458,2492,2495,2497,2499,2501,2505,2508,2534,2537,2544,2546,2548,2552,2555,2569,2576,2578,2580,2582,2586,2589,2592,2622,2629,2632,2640,2642,2644,2648,2651,2696,2702,2704,2706,2710,2713,2716,2723],[1118,2373],{},[24,2375,2377],{"id":2376},"_1-how-to-build-effective-solution-delivery-models-for-software-success","1. How to Build Effective Solution Delivery Models for Software Success",[16,2379,2380],{},"When starting a new software initiative, it’s tempting to design a solution delivery model like an org chart: boxes, titles, and volunteers slotted in. While this looks neat on paper, successful delivery requires more than filling roles — it requires building a model that reflects the real dynamics of software work.",[16,2382,1977,2383,2386,2387,2390],{},[19,2384,2385],{},"solution delivery model"," is the blueprint for how people, processes, and technology will work together. The strongest models begin with ",[19,2388,2389],{},"engaging skilled leads early"," and giving them the authority to help shape the team. These experienced practitioners not only bring technical insight but also ensure roles are filled by the right people, aligned with real delivery requirements.",[32,2392],{},[1118,2394],{},[24,2396,2398],{"id":2397},"_2-start-with-skilled-leads","2. Start With Skilled Leads",[16,2400,2401,2404,2405,2408],{},[19,2402,2403],{},"Skilled leads"," are ",[19,2406,2407],{},"experienced technical practitioners"," such as solution architects, senior developers, or technical leads. Unlike managers who may focus on budgets or reporting, skilled leads bring:",[48,2410,2411,2417,2423],{},[51,2412,2413,2416],{},[19,2414,2415],{},"Hands-on knowledge"," of trade-offs, integration points, and risks.",[51,2418,2419,2422],{},[19,2420,2421],{},"Pattern recognition"," from having delivered solutions before.",[51,2424,2425,2428],{},[19,2426,2427],{},"Credibility"," with the team because they’ve built what they’re asking others to build.",[16,2430,2431,2432,2435],{},"Crucially, skilled leads must be empowered to ",[19,2433,2434],{},"identify the roles required and select individuals whose skills match those needs",". This prevents mismatches and ensures delivery realities drive staffing decisions.",[16,2437,2438],{},[1139,2439,2440],{"href":1141,"target":1142},[156,2441],{"style":1145,"title":158,"src":1141,"alt":158,"width":1147,"height":1148},[1118,2443],{},[32,2445],{},[1118,2447],{},[24,2449,2451],{"id":2450},"_3-responsibilities-of-skilled-leads","3. Responsibilities of Skilled Leads",[16,2453,2454],{},"Engaging skilled leads early is only the beginning. For a solution delivery model to succeed, these leads must have clear responsibilities and the authority to carry them out. Their role is not just advisory — they are the architects of how delivery will actually work.",[16,2456,2457],{},"Key responsibilities include:",[48,2459,2460,2468,2476,2484],{},[51,2461,2462,2465,2467],{},[19,2463,2464],{},"Defining the people and roles required",[1118,2466],{},"\nSkilled leads identify the specific roles needed (e.g., developers, testers, UX, DevOps) and recommend individuals whose skills align with delivery requirements. This ensures capability gaps are addressed from the start.",[51,2469,2470,2473,2475],{},[19,2471,2472],{},"Guiding technology choices",[1118,2474],{},"\nWith their hands-on experience, skilled leads evaluate and select appropriate tools, frameworks, and platforms. They weigh trade-offs, considering scalability, maintainability, and integration with existing systems.",[51,2477,2478,2481,2483],{},[19,2479,2480],{},"Identifying risk components",[1118,2482],{},"\nSkilled leads spot risks early — whether technical (integration bottlenecks, data challenges), process-related (unrealistic timelines, unclear requirements), or people-related (skills gaps, single points of failure). They surface these risks with actionable mitigation strategies.",[51,2485,2486,2489,2491],{},[19,2487,2488],{},"Shaping the delivery schedule",[1118,2490],{},"\nRather than having a schedule imposed from the top down, skilled leads provide input based on delivery realities. They help define phases, iterations, and dependencies to ensure the plan is achievable.",[16,2493,2494],{},"By formalizing these responsibilities, organizations empower skilled leads not just to contribute, but to shape the project in ways that directly increase the likelihood of success.",[1118,2496],{},[32,2498],{},[1118,2500],{},[24,2502,2504],{"id":2503},"_4-align-delivery-foundations-with-skills","4. Align Delivery Foundations With Skills",[16,2506,2507],{},"While enthusiasm is valuable, delivery models succeed when every foundational area is matched to real capability — not just availability or volunteer interest. Skilled leads ensure alignment across four dimensions:",[48,2509,2510,2516,2522,2528],{},[51,2511,2512,2515],{},[19,2513,2514],{},"Roles:"," Responsibilities are assigned to individuals with proven capability, and contributors are supported by experienced mentors.",[51,2517,2518,2521],{},[19,2519,2520],{},"Technology:"," Tools, frameworks, and platforms are chosen by those who understand scalability, integration, and long-term sustainability.",[51,2523,2524,2527],{},[19,2525,2526],{},"Risks:"," Common pitfalls are identified early — whether technical, process, or people-related — with mitigation strategies in place.",[51,2529,2530,2533],{},[19,2531,2532],{},"Schedule:"," Timelines are shaped by delivery realities, not just top-down assumptions, ensuring phases and dependencies are achievable.",[16,2535,2536],{},"This comprehensive alignment, led by skilled practitioners, creates resilience and prevents gaps that would otherwise stall progress.",[16,2538,2539],{},[1139,2540,2542],{"href":2541,"target":1142},"\u002Farticles\u002Fimages\u002Fstructure_3.png",[156,2543],{"style":1145,"title":158,"src":2541,"alt":158,"width":1147,"height":1148},[32,2545],{},[1118,2547],{},[24,2549,2551],{"id":2550},"_5-empower-leaders-with-authority","5. Empower Leaders With Authority",[16,2553,2554],{},"One of the most common pitfalls is giving leaders accountability without authority.",[48,2556,2557,2563],{},[51,2558,2559,2562],{},[19,2560,2561],{},"Accountability"," means owning the outcome.",[51,2564,2565,2568],{},[19,2566,2567],{},"Authority"," means having the power to make decisions that affect that outcome.",[16,2570,2571,2572,2575],{},"For solution delivery, authority must extend to ",[19,2573,2574],{},"shaping the team, defining roles, guiding technology, and influencing the schedule",". Leaders who are accountable for delivery must also be trusted to make these decisions. Without this, projects risk drifting into firefighting and frustration.",[1118,2577],{},[32,2579],{},[1118,2581],{},[24,2583,2585],{"id":2584},"_6-build-the-team-around-perspective","6. Build the Team Around Perspective",[16,2587,2588],{},"Veteran professionals bring pattern recognition from years of past projects. They’ve seen what works, what fails, and what pitfalls repeat themselves. Successful solution delivery models use this intuition constructively, not just as “advice,” but as a foundation for how the team is built and guided.",[16,2590,2591],{},"When skilled leads are engaged, their intuition supports every responsibility outlined earlier:",[48,2593,2594,2600,2606,2612],{},[51,2595,2596,2599],{},[19,2597,2598],{},"People and Roles",": They sense when a role is missing or misaligned and recommend adjustments before gaps become critical.",[51,2601,2602,2605],{},[19,2603,2604],{},"Technology",": They can spot when a tool or framework is a poor fit for the project’s scale or integration needs, often before formal evaluations reveal issues.",[51,2607,2608,2611],{},[19,2609,2610],{},"Risk Components",": They recognize risk patterns — unrealistic deadlines, single points of failure, brittle integrations — and raise flags early.",[51,2613,2614,2617,2618,2621],{},[19,2615,2616],{},"Schedule",": They know how long certain tasks ",[1128,2619,2620],{},"really"," take and adjust timelines to avoid setting teams up for crunch or missed milestones.",[16,2623,2624,2625,2628],{},"By weaving this experience-driven perspective into the model, skilled leads make it realistic, flexible, and resilient. Management’s role is to ",[19,2626,2627],{},"trust and empower these insights"," rather than override them with top-down assumptions.",[16,2630,2631],{},"When models are shaped this way, teams are empowered to adapt, collaborate, and deliver effectively — not by chance, but by design.",[16,2633,2634],{},[1139,2635,2637],{"href":2636,"target":1142},"\u002Farticles\u002Fimages\u002Fstructure_5.png",[156,2638],{"style":1145,"title":158,"src":2636,"alt":158,"width":2639,"height":1148},500,[32,2641],{},[1118,2643],{},[24,2645,2647],{"id":2646},"_7-best-practices-for-strong-solution-delivery-models","7. Best Practices for Strong Solution Delivery Models",[16,2649,2650],{},"To build delivery models that succeed, managers should focus on empowering skilled leads and aligning the model with delivery realities. Key practices include:",[2652,2653,2654,2660,2666,2672,2678,2684,2690],"ol",{},[51,2655,2656,2659],{},[19,2657,2658],{},"Engage skilled leads first"," and give them authority over defining the team’s structure — including identifying roles and selecting individuals who align with project requirements.",[51,2661,2662,2665],{},[19,2663,2664],{},"Align skills with responsibilities"," so every role is filled by someone capable of meeting its demands, with enthusiastic contributors supported by experienced mentors.",[51,2667,2668,2671],{},[19,2669,2670],{},"Empower skilled leads to guide technology choices,"," weighing trade-offs in scalability, integration, and maintainability rather than relying solely on external preferences.",[51,2673,2674,2677],{},[19,2675,2676],{},"Leverage skilled leads to identify risks early"," — technical, process, or people-related — and plan mitigations before they grow into issues.",[51,2679,2680,2683],{},[19,2681,2682],{},"Shape realistic schedules"," with input from skilled leads, ensuring timelines reflect actual delivery realities rather than top-down assumptions.",[51,2685,2686,2689],{},[19,2687,2688],{},"Pair authority with accountability,"," so those responsible for outcomes also have the decision-making power to shape them.",[51,2691,2692,2695],{},[19,2693,2694],{},"Respect technical input"," across all decisions, creating a delivery model that adapts and evolves with project learning.",[16,2697,2698,2699,1200],{},"By following these practices, managers transform delivery models from paper diagrams into operating systems that enable real, ",[19,2700,2701],{},"sustainable success",[1118,2703],{},[32,2705],{},[24,2707,2709],{"id":2708},"_8-closing-from-models-to-outcomes","8. Closing: From Models to Outcomes",[16,2711,2712],{},"A solution delivery model isn’t just a diagram — it’s the operating system for delivery. Done well, it empowers teams and leads to successful outcomes.",[16,2714,2715],{},"By starting with skilled leads, granting them the authority to shape the team, and making them responsible for people, roles, technology, risks, and schedules, managers create delivery models that reflect the realities of software work. This balance of accountability, authority, and expertise is what sets teams up for success instead of struggle.",[16,2717,2718],{},[1139,2719,2721],{"href":2720,"target":1142},"\u002Farticles\u002Fimages\u002Fstructure_final.png",[156,2722],{"style":1145,"title":158,"src":2720,"alt":158,"width":2639,"height":1148},[32,2724],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":2726},[2727,2728,2729,2730,2731,2732,2733,2734],{"id":2376,"depth":1084,"text":2377},{"id":2397,"depth":1084,"text":2398},{"id":2450,"depth":1084,"text":2451},{"id":2503,"depth":1084,"text":2504},{"id":2550,"depth":1084,"text":2551},{"id":2584,"depth":1084,"text":2585},{"id":2646,"depth":1084,"text":2647},{"id":2708,"depth":1084,"text":2709},"2025-09-17","Strong delivery models don’t just help teams — they enable organizations to achieve business goals faster. This article outlines how engaging skilled leads, aligning roles to expertise, and pairing authority with accountability creates delivery models that deliver measurable results.","\u002Farticles\u002Fimages\u002Fstructure_1.png",{},"\u002Farticles\u002F2025_09_solution_delivery_models",{"title":2369,"description":2736},"articles\u002F2025_09_Solution_Delivery_Models",[1109,1110],"Vgc9UBS99fOsbECKf3yPuI-Xh8f1lW8tPPsRM4B7d8o",{"id":2745,"title":2746,"author":1915,"body":2747,"createdAt":3203,"description":3204,"extension":1101,"img":1938,"meta":3205,"navigation":1104,"path":3206,"seo":3207,"stem":3208,"tags":3209,"updatedAt":3203,"__hash__":3210},"articles\u002Farticles\u002Fembracing-ai-revolution.md","Embracing the AI Revolution in Software Development",{"type":10,"value":2748,"toc":3193},[2749,2752,2755,2761,2765,2768,2771,2803,2806,2808,2810,2814,2821,2824,2862,2865,2872,2879,2881,2883,2887,2890,2916,2923,2925,2927,2931,2938,2941,2979,2982,2984,2986,2990,3040,3043,3045,3047,3051,3054,3158,3160,3162,3166,3173,3176,3179,3182],[24,2750,2746],{"id":2751},"embracing-the-ai-revolution-in-software-development",[16,2753,2754],{},"Embrace AI to boost throughput while tightening reliability—keep fundamentals, raise test depth, strengthen governance, and design for resilience and cost control.",[16,2756,2757],{},[1139,2758,2759],{"href":1938,"target":1142},[156,2760],{"style":1145,"title":158,"src":1938,"alt":158,"width":2639,"height":1148},[24,2762,2764],{"id":2763},"why-this-feels-like-a-leap-of-faith-why-this-is-hard","Why this feels like a leap of faith (why this is hard)",[16,2766,2767],{},"It challenges professional identity, introduces trust\u002Freliability concerns (model errors, drift), adds operational and org change risk—so treat it like any production change: constrain, control, iterate, measure.",[16,2769,2770],{},"Switching gears isn’t easy. A few honest reasons:",[48,2772,2773,2779,2785,2791,2797],{},[51,2774,2775,2778],{},[19,2776,2777],{},"Identity and craft:"," We’ve invested years honing debugging instincts, architectural judgment, and a sense for elegant code. Offloading parts of that to a model can feel like losing a piece of professional identity.",[51,2780,2781,2784],{},[19,2782,2783],{},"Trust and reliability:"," Generative tools can produce correct-looking but subtly wrong code or docs. Without new guardrails, we risk shipping uncertainty.",[51,2786,2787,2790],{},[19,2788,2789],{},"Data and ethics:"," Privacy, IP, and bias aren’t side notes—they’re blockers if ignored.",[51,2792,2793,2796],{},[19,2794,2795],{},"Operational risk:"," Tooling churn, vendor lock-in, model drift, and unpredictable costs (tokens, inference latency) complicate roadmaps.",[51,2798,2799,2802],{},[19,2800,2801],{},"Organizational change:"," Roles, responsibilities, and performance expectations will shift. Clarity and fairness matter as much as tools.",[16,2804,2805],{},"Treat adoption like any other change in production: set constraints, add controls, iterate behind safety nets, and measure outcomes.",[1118,2807],{},[32,2809],{},[24,2811,2813],{"id":2812},"your-years-of-best-practices-still-compound-the-basics-still-matter","Your years of best practices still compound (the basics still matter)",[16,2815,2816],{},[1139,2817,2819],{"href":2818,"target":1142},"\u002Farticles\u002Fimages\u002Fembracing00.png",[156,2820],{"style":1145,"title":158,"src":2818,"alt":158,"width":2639,"height":1148},[16,2822,2823],{},"The habits that made teams effective in the pre‑AI era matter more—not less—when AI accelerates the pace:",[48,2825,2826,2832,2838,2844,2850,2856],{},[51,2827,2828,2831],{},[19,2829,2830],{},"Clear boundaries."," Keep modules small and interfaces explicit so AI help slots in cleanly.",[51,2833,2834,2837],{},[19,2835,2836],{},"Reviews that catch intent."," Mark AI‑assisted changes and review for business rules, not just style.",[51,2839,2840,2843],{},[19,2841,2842],{},"Layered tests."," Unit → contract → end‑to‑end. Ask tools to draft tests; humans set the bar.",[51,2845,2846,2849],{},[19,2847,2848],{},"Pipelines that say “no.”"," Lint, security scans, license checks, coverage gates.",[51,2851,2852,2855],{},[19,2853,2854],{},"Observability."," Logs, metrics, traces, feature flags—so you can explain behavior in prod.",[51,2857,2858,2861],{},[19,2859,2860],{},"Security by default."," Least privilege, redaction, data classification, and audit trails.",[16,2863,2864],{},"These basics turn speed into safe speed.",[16,2866,2867,2868,2871],{},"AI doesn’t erase fundamentals; it ",[19,2869,2870],{},"amplifies"," them. Teams with strong engineering hygiene get multiplicative returns.",[16,2873,2874,2875,2878],{},"These ",[19,2876,2877],{},"practices"," set the stage for your real differentiator: years of service and context—now something you can codify and scale with AI.",[1118,2880],{},[32,2882],{},[24,2884,2886],{"id":2885},"the-benefit-of-years-of-service-your-unfair-advantage-experience","The benefit of years of service (your unfair advantage: experience)",[16,2888,2889],{},"Experience is context. Decades of supporting customers and production systems give you:",[48,2891,2892,2898,2904,2910],{},[51,2893,2894,2897],{},[19,2895,2896],{},"System memory."," You remember the odd integrations and the corners that bite.",[51,2899,2900,2903],{},[19,2901,2902],{},"Risk sense."," You know when to spike, when to refactor, and when to write the doc first.",[51,2905,2906,2909],{},[19,2907,2908],{},"Customer fluency."," You can explain trade‑offs and keep trust.",[51,2911,2912,2915],{},[19,2913,2914],{},"Context."," You know why decisions were made—not just what shipped.",[16,2917,2918,2919,2922],{},"Use AI to ",[19,2920,2921],{},"capture and share"," that edge: short design records, checklists, prompt patterns, and small evaluation suites that help new teammates ramp fast.",[1118,2924],{},[32,2926],{},[24,2928,2930],{"id":2929},"architecture-priorities-for-the-ai-era","Architecture priorities for the AI era",[16,2932,2933],{},[1139,2934,2936],{"href":2935,"target":1142},"\u002Farticles\u002Fimages\u002Fembracing3.png",[156,2937],{"style":1145,"title":158,"src":2935,"alt":158,"width":2639,"height":1148},[16,2939,2940],{},"As AI features grow, systems get more distributed and data‑heavy. Focus here:",[48,2942,2943,2949,2955,2961,2967,2973],{},[51,2944,2945,2948],{},[19,2946,2947],{},"Events first."," Capture domain events and keep an immutable log. Useful for retrieval, analytics, and audits.",[51,2950,2951,2954],{},[19,2952,2953],{},"Resilience."," Idempotency, sagas, circuit breakers, bulkheads, back‑pressure. More changes → smaller blast radius.",[51,2956,2957,2960],{},[19,2958,2959],{},"Data contracts."," Schemas, versioning, lineage, retention. Retrieval is only as good as the data.",[51,2962,2963,2966],{},[19,2964,2965],{},"Latency and cost."," Budgets, caching, distillation, and clear online vs. offline paths.",[51,2968,2969,2972],{},[19,2970,2971],{},"Security posture."," Secrets management, tenant isolation, redaction, and a reviewable trail.",[51,2974,2975,2978],{},[19,2976,2977],{},"Team fit."," Align team boundaries with the architecture so the path to “correct” is also the fastest.",[16,2980,2981],{},"In sum: Treat these as a single operating stack. Events give you a trustworthy record, resilience patterns contain failure, data contracts make answers predictable, cost\u002Flatency guardrails keep experiences fast and affordable, security preserves trust, and team–architecture fit keeps momentum. Adopt them together, instrument them well, and you can scale AI without surprises.",[1118,2983],{},[32,2985],{},[24,2987,2989],{"id":2988},"a-practical-playbook-to-adopt-ai-without-burning-trust-a-short-playbook","A practical playbook to adopt AI without burning trust (a short playbook)",[2652,2991,2992,2998,3004,3010,3016,3022,3028,3034],{},[51,2993,2994,2997],{},[19,2995,2996],{},"Choose safe pilots."," Docs from code, test scaffolds, API clients, migration drafts. Define success up front.",[51,2999,3000,3003],{},[19,3001,3002],{},"Gate AI output."," Mark AI‑assisted diffs. No unreviewed AI content to production.",[51,3005,3006,3009],{},[19,3007,3008],{},"Standardize prompts."," Keep a versioned prompt library with examples and misuses.",[51,3011,3012,3015],{},[19,3013,3014],{},"Test the behavior, not the vibes."," Add small, repeatable evaluations for key flows.",[51,3017,3018,3021],{},[19,3019,3020],{},"Protect data."," Classify, redact, and document what leaves your boundary.",[51,3023,3024,3027],{},[19,3025,3026],{},"Measure the work."," Lead time, change failure rate, time to restore, escaped defects, on‑call load.",[51,3029,3030,3033],{},[19,3031,3032],{},"Teach and learn."," Brown‑bags, mob sessions with AI pair tools, and incident reviews that include the human‑AI handoff.",[51,3035,3036,3039],{},[19,3037,3038],{},"Keep people accountable."," Humans own intent and acceptance; tools speed execution.",[16,3041,3042],{},"Start small with low‑risk wins, keep humans approving changes, version your prompts, test what the system actually does, protect sensitive data, watch a handful of delivery metrics, keep teaching the team, and make sure people—not tools—own outcomes.",[1118,3044],{},[32,3046],{},[24,3048,3050],{"id":3049},"what-to-keep-vs-what-to-change","What to keep vs. what to change",[16,3052,3053],{},"The left column lists the practices that still carry you. The right column lists upgrades that let you scale AI safely. Assign owners and 30\u002F60\u002F90‑day milestones; review quarterly.",[2014,3055,3056,3066],{},[2017,3057,3058],{},[2020,3059,3060,3063],{},[2023,3061,3062],{},"Keep",[2023,3064,3065],{},"Change",[2037,3067,3068,3076,3117,3150],{},[2020,3069,3070,3073],{},[2042,3071,3072],{},"Architectural rigor, testing discipline, security posture",[2042,3074,3075],{},"Treat prompts, retrieval graphs, and model evaluations as first‑class artifacts",[2020,3077,3078,3081],{},[2042,3079,3080],{},"Design docs and decisions",[2042,3082,3083,3084,3087,3088,3091,3092,3091,3095,3091,3098,3091,3101,3091,3104,3091,3107,3091,3110,3091,3113,3116],{},"Use an ",[19,3085,3086],{},"Executive Decision Summary",": ",[19,3089,3090],{},"business outcome",", ",[19,3093,3094],{},"customer impact",[19,3096,3097],{},"risk & mitigation",[19,3099,3100],{},"cost\u002Fefficiency impact",[19,3102,3103],{},"validation plan",[19,3105,3106],{},"data governance",[19,3108,3109],{},"go\u002Fno‑go criteria",[19,3111,3112],{},"rollout\u002Frollback & kill switch",[19,3114,3115],{},"owner + review date",". Link the summary from code, pipelines, and runbooks.",[2020,3118,3119,3122],{},[2042,3120,3121],{},"Operational targets",[2042,3123,3124,3125,3128,3129,3132,3133,3091,3136,3091,3139,3091,3142,3145,3146,3149],{},"Agree on ",[19,3126,3127],{},"response time\u002Fquality\u002Fcost‑per‑request targets"," with clear ",[19,3130,3131],{},"go\u002Fno‑go gates",". Add ",[19,3134,3135],{},"caching (TTL + keys)",[19,3137,3138],{},"circuit breakers",[19,3140,3141],{},"rate limits",[19,3143,3144],{},"progressive rollouts",", and ",[19,3147,3148],{},"dashboards"," with weekly reviews.",[2020,3151,3152,3155],{},[2042,3153,3154],{},"Code review culture",[2042,3156,3157],{},"Add concise AI‑assisted review checklists and provenance notes",[1118,3159],{},[32,3161],{},[24,3163,3165],{"id":3164},"closing-thoughts","Closing thoughts",[16,3167,3168],{},[1139,3169,3171],{"href":3170,"target":1142},"\u002Farticles\u002Fimages\u002Fembracing4.png",[156,3172],{"style":1145,"title":158,"src":3170,"alt":158,"width":2639,"height":1148},[16,3174,3175],{},"AI doesn’t replace engineering judgment—it amplifies it when we pair speed with safeguards. Keep the habits that made us reliable: clear seams, layered tests, strong pipelines, observability, and a default-secure posture.  Then codify our experience—decision records, prompt patterns, and small eval suites—so good judgment scales.",[16,3177,3178],{},"Design the platform as a single operating stack: event logs for truth, resilience patterns to contain failure, data contracts for predictability, budgets for latency and cost, and team boundaries that match the architecture.",[16,3180,3181],{},"Start with low-risk wins, track a few delivery and quality metrics, and require human ownership of intent and acceptance. Do this, and AI becomes force-multiplication for trusted delivery: fewer keystrokes for the same intent, faster feedback loops, safer changes per day, and calmer on-call.",[13,3183,3184],{},[16,3185,3186,3189,3190],{},[1128,3187,3188],{},"“Things are only impossible until they are not.”"," — ",[19,3191,3192],{},"Captain Jean‑Luc Picard",{"title":1080,"searchDepth":1081,"depth":1081,"links":3194},[3195,3196,3197,3198,3199,3200,3201,3202],{"id":2751,"depth":1084,"text":2746},{"id":2763,"depth":1084,"text":2764},{"id":2812,"depth":1084,"text":2813},{"id":2885,"depth":1084,"text":2886},{"id":2929,"depth":1084,"text":2930},{"id":2988,"depth":1084,"text":2989},{"id":3049,"depth":1084,"text":3050},{"id":3164,"depth":1084,"text":3165},"2025-08-10","Accepting AI’s impact and choosing to level up, not bow out.   Pragmatic guide to embracing AI patterns to raise productivity without trading away reliability.",{"date":3203,"name":2361},"\u002Farticles\u002Fembracing-ai-revolution",{"title":2746,"description":3204},"articles\u002Fembracing-ai-revolution",[1109,1110],"eyWvSw_NXCfGK2ccvk3yIF44UjFrI895oLXSt9TXqZA",{"id":3212,"title":3213,"author":8,"body":3214,"createdAt":3330,"description":3331,"extension":1101,"img":3332,"meta":3333,"navigation":1104,"path":3334,"seo":3335,"stem":3336,"tags":3337,"updatedAt":3330,"__hash__":3338},"articles\u002Farticles\u002F2025_02_25_SymphonyOfTeams.md","Building Software Solutions - A Symphony of Teams, Architecture, and Insight",{"type":10,"value":3215,"toc":3320},[3216,3219,3223,3232,3234,3238,3241,3244,3251,3253,3257,3260,3263,3265,3269,3272,3275,3277,3281,3284,3287,3289,3293,3296,3299,3304,3308,3311,3313],[24,3217,3213],{"id":3218},"building-software-solutions-a-symphony-of-teams-architecture-and-insight",[24,3220,3222],{"id":3221},"overview","Overview",[16,3224,3225,3226,3228,3229,3231],{},"In today's rapidly evolving technology landscape, successful software solutions don’t just emerge from a collection of random individuals performing isolated tasks. Instead, they are the result of well-aligned teams, a robust architectural vision, and insightful business analysis working in concert.\n",[1118,3227],{},"\nThis article explores how the collaborative dynamics of a cohesive team, the strategic oversight provided by software architecture, and the unifying narrative crafted by business analysts come together like the notes of a symphony.  We delve into the critical value each component brings, reveal the often invisible work that underpins these efforts, and address the challenges of navigating management resistance in favor of a team-centric approach.\n",[1118,3230],{},"\nThis integrated approach is essential not only to deliver high-quality software but also to navigate the complex dynamics of modern business environments.",[1118,3233],{},[24,3235,3237],{"id":3236},"_1-the-value-of-teams","1. The Value of Teams",[16,3239,3240],{},"At the heart of any successful software project lies a cohesive team. Think of a team as the ensemble of skilled musicians in an orchestra. Each member plays a crucial part, contributing their unique expertise to achieve a harmonious outcome. When teams are aligned with a shared vision, their collective strength amplifies individual talents, fosters collaboration, and drives innovation.",[16,3242,3243],{},"Team-based approaches go beyond merely dividing work into discrete tasks. They involve building trust, establishing effective communication channels, and nurturing an environment where ideas can be freely exchanged. This collaborative spirit not only accelerates problem-solving but also promotes accountability, as every team member understands how their contributions impact the overall project.",[16,3245,3246],{},[1139,3247,3249],{"href":3248},"\u002Farticles\u002Fimages\u002Fsymphony1.jpg",[156,3250],{"style":1145,"title":158,"src":3248,"alt":158,"width":2639,"height":1148},[1118,3252],{},[24,3254,3256],{"id":3255},"_2-the-value-of-software-architecture","2. The Value of Software Architecture",[16,3258,3259],{},"Software architecture is much more than just the technical blueprint of a project—it’s the strategic framework that underpins every decision. A well-defined architecture sets the stage for scalability, maintainability, and performance. It provides the roadmap that guides developers, ensuring that each component integrates seamlessly into a larger system.",[16,3261,3262],{},"Much like a conductor guiding an orchestra, the software architect orchestrates how different modules interact and evolve over time. By establishing clear design principles and robust standards, architects can preempt potential issues, mitigate risks, and facilitate smoother transitions during technology shifts. This strategic oversight is indispensable in managing complexity and ensuring that the final product not only meets current needs but is also adaptable for future growth.",[1118,3264],{},[24,3266,3268],{"id":3267},"_3-the-role-of-the-business-analyst-crafting-a-unified-story","3. The Role of the Business Analyst: Crafting a Unified Story",[16,3270,3271],{},"The business analyst acts as the storyteller, weaving together the diverse elements of a project into a coherent narrative. They serve as the bridge between technical teams and business stakeholders, translating business requirements into actionable insights. Much like a composer arranging individual musical pieces into a symphony, the business analyst not only aligns the project requirements but also incorporates the varied nature and skillsets of the team into the orchestration.",[16,3273,3274],{},"By recognizing and leveraging each team member’s unique strengths, the business analyst ensures that every feature, function, and component fits perfectly into the larger business puzzle. This role is crucial in connecting seemingly disparate elements into a unified story, helping teams stay focused on delivering value that resonates with the end user and aligns with strategic business goals.",[1118,3276],{},[24,3278,3280],{"id":3279},"_4-recognizing-the-invisible-work","4. Recognizing the Invisible Work",[16,3282,3283],{},"One of the greatest challenges in software development is that the critical work of aligning teams, defining architecture, and crafting a unified narrative is often invisible to those not deeply involved in the day-to-day processes. Non-technical stakeholders may only see the final product, unaware of the intricate collaboration and problem-solving that made it possible. This disconnect can lead to misunderstandings about where success—or failure—truly originates.",[16,3285,3286],{},"It’s essential for those within the tech community to communicate these complexities clearly to management. By illustrating how a well-coordinated team and a thoughtful architectural approach drive sustainable innovation, advocates can make a compelling case for strategic investment in team-based methodologies. However, this is often a difficult road, as traditional management structures may prefer to attribute success or failure to individual contributors rather than acknowledge systemic factors.",[1118,3288],{},[24,3290,3292],{"id":3291},"_5-navigating-management-resistance","5. Navigating Management Resistance",[16,3294,3295],{},"The transition to a team-based, architectural approach is met with significant resistance from management, often due to their limited understanding of the vital components, such as team cohesion and architectural foresight, that contribute to a successful project.",[16,3297,3298],{},"Changing the mindset from task-oriented management to team-centric collaboration is no small feat. Many managers are accustomed to measuring performance based on discrete deliverables, and shifting this paradigm requires both patience and persistence. Resistance often stems from a reluctance to acknowledge that previous approaches may have overlooked the importance of teamwork and architectural cohesion.",[16,3300,3301,3302],{},"For those advocating for a more integrated, team-based approach, it’s important to focus on data-driven outcomes and success stories that highlight the benefits of collaboration. Emphasizing improved efficiency, reduced downtime, and higher quality products can help demonstrate that a focus on team dynamics and architectural integrity is not just a luxury, but a necessity for long-term success.\n",[1118,3303],{},[24,3305,3307],{"id":3306},"_9-conclusion","9. Conclusion",[16,3309,3310],{},"The development of sophisticated software solutions is a nuanced art—a symphony where every instrument plays its part. Teams that work in harmony, guided by a clear architectural vision and a well-crafted narrative from business analysis, produce outcomes that far exceed the sum of their parts. While the journey toward a team-centric model may be met with resistance, the benefits of such an approach are undeniable. By embracing this integrated method, organizations can unlock greater innovation, foster stronger collaboration, and ultimately deliver software that not only meets but exceeds business and user expectations.",[1118,3312],{},[16,3314,3315],{},[1139,3316,3318],{"href":3317},"\u002Farticles\u002Fimages\u002Fsymphony2.jpg",[156,3319],{"style":1145,"title":158,"src":3317,"alt":158,"width":2639,"height":1148},{"title":1080,"searchDepth":1081,"depth":1081,"links":3321},[3322,3323,3324,3325,3326,3327,3328,3329],{"id":3218,"depth":1084,"text":3213},{"id":3221,"depth":1084,"text":3222},{"id":3236,"depth":1084,"text":3237},{"id":3255,"depth":1084,"text":3256},{"id":3267,"depth":1084,"text":3268},{"id":3279,"depth":1084,"text":3280},{"id":3291,"depth":1084,"text":3292},{"id":3306,"depth":1084,"text":3307},"2025-02-25","Imagine software development as a symphony—where visionary architecture, seamless collaboration, and sharp business insights unite to create groundbreaking solutions, turning resistance into progress.","\u002Farticles\u002Fimages\u002Fsymphony0.jpg",{},"\u002Farticles\u002F2025_02_25_symphonyofteams",{"title":3213,"description":3331},"articles\u002F2025_02_25_SymphonyOfTeams",[1109,1110],"oTq0u6vqRIJB40tJMMZa73OdPHRgpeF2KL71Z39xs8k",{"id":3340,"title":3341,"author":8,"body":3342,"createdAt":3582,"description":3583,"extension":1101,"img":3584,"meta":3585,"navigation":1104,"path":3586,"seo":3587,"stem":3588,"tags":3589,"updatedAt":3582,"__hash__":3590},"articles\u002Farticles\u002F2025_02_lowcode-solutions.md","Pitfalls and Potential of Low-Code Solutions - A Critical Perspective",{"type":10,"value":3343,"toc":3571},[3344,3348,3350,3353,3355,3359,3362,3365,3368,3375,3377,3381,3384,3410,3413,3415,3419,3422,3442,3445,3447,3451,3454,3474,3477,3479,3483,3486,3506,3509,3511,3515,3518,3538,3540,3544,3547,3550,3558,3564],[24,3345,3347],{"id":3346},"the-pitfalls-and-potential-of-low-code-solutions-a-balanced-perspective","The Pitfalls and Potential of Low-Code Solutions: A Balanced Perspective",[24,3349,3222],{"id":3221},[16,3351,3352],{},"Low-code platforms offer rapid development and reduced reliance on IT teams, but they introduce significant risks that enterprises must carefully consider. While beneficial for small-scale applications and prototyping, low-code solutions often lead to vendor lock-in, escalating licensing costs, technical debt, and scalability challenges. They create the illusion that software development is simple, encouraging reliance on non-technical personnel, which ultimately results in inefficiencies and costly rework. Enterprises should avoid using low-code as a primary strategy and instead consult experienced solution architects to explore traditional software development approaches that incorporate automation, modular design, and scalable architectures. Prioritizing skilled engineering teams ensures long-term flexibility, cost-effectiveness, and sustainable digital transformation.",[1118,3354],{},[24,3356,3358],{"id":3357},"_1-introduction","1. Introduction",[16,3360,3361],{},"Low-code platforms have gained traction as a means to accelerate digital transformation by promising rapid development, reduced dependence on software developers, and cost efficiencies. While these benefits may be appealing, they often mask significant long-term challenges that enterprises must carefully evaluate.",[16,3363,3364],{},"Although low-code solutions facilitate quick prototyping and empower business users, they are not designed to support complex, enterprise-grade applications. Over-reliance on proprietary frameworks, vendor lock-in, limited scalability, and technical debt can outweigh the initial advantages. This article provides a thorough examination of both the benefits and the inherent risks of low-code platforms, ensuring decision-makers are well-equipped to make informed choices.",[16,3366,3367],{},"Organizations seeking sustainable and scalable software solutions should be cautious of low-code approaches. While these platforms may be suitable for internal tools or small-scale applications, they are not viable substitutes for traditional software development in mission-critical environments. Instead, enterprises should prioritize robust engineering practices and consult experienced solution architects to achieve efficiency and scalability through proven development methodologies.",[16,3369,3370],{},[1139,3371,3373],{"href":3372,"target":1142},"\u002Farticles\u002Fimages\u002Flowcode2.png",[156,3374],{"style":1145,"title":158,"src":3372,"alt":158,"width":2639,"height":1148},[1118,3376],{},[24,3378,3380],{"id":3379},"_2-the-appeal-of-low-code-solutions","2. The Appeal of Low-Code Solutions",[16,3382,3383],{},"Low-code platforms provide several advantages, particularly for non-technical users and smaller projects:",[48,3385,3386,3392,3398,3404],{},[51,3387,3388,3391],{},[19,3389,3390],{},"Faster Development Cycles:"," Applications can be built quickly without extensive development timelines.",[51,3393,3394,3397],{},[19,3395,3396],{},"Reduced IT Dependency:"," Business users can develop basic applications, reducing reliance on overstretched IT teams.",[51,3399,3400,3403],{},[19,3401,3402],{},"Visual Development Interface:"," Drag-and-drop functionality simplifies UI design and workflow automation.",[51,3405,3406,3409],{},[19,3407,3408],{},"Rapid Iterations and Prototyping:"," Teams can test ideas and iterate without committing to full-scale development.",[16,3411,3412],{},"While these benefits may seem compelling, they are often accompanied by hidden trade-offs that become evident as an organization's needs evolve.",[1118,3414],{},[24,3416,3418],{"id":3417},"_3-the-illusion-of-simplicity","3. The Illusion of Simplicity",[16,3420,3421],{},"Low-code platforms are often marketed as tools that enable software development without requiring technical expertise. However, building enterprise-grade applications still requires knowledge of integration, security, and performance optimization.",[48,3423,3424,3430,3436],{},[51,3425,3426,3429],{},[19,3427,3428],{},"Complex Integrations:"," Connecting to external systems and APIs often requires custom workarounds.",[51,3431,3432,3435],{},[19,3433,3434],{},"Security and Compliance:"," Enterprise security and regulatory compliance demand expertise beyond built-in low-code features.",[51,3437,3438,3441],{},[19,3439,3440],{},"Scalability Limitations:"," Applications that outgrow the low-code platform may require costly rewrites or migrations.",[16,3443,3444],{},"These factors highlight that while low-code may seem to simplify development, it often leads to unforeseen challenges that necessitate skilled engineering intervention.",[1118,3446],{},[24,3448,3450],{"id":3449},"_4-high-licensing-costs-and-vendor-lock-in","4. High Licensing Costs and Vendor Lock-in",[16,3452,3453],{},"Many low-code platforms draw organizations in with seemingly affordable entry-level pricing models. However, costs tend to escalate quickly:",[48,3455,3456,3462,3468],{},[51,3457,3458,3461],{},[19,3459,3460],{},"Tiered Pricing Models:"," As usage, data storage, or the number of applications increase, licensing fees can multiply exponentially.",[51,3463,3464,3467],{},[19,3465,3466],{},"Proprietary Ecosystems:"," Once deeply embedded in a low-code platform, migrating to a different technology stack can be prohibitively expensive.",[51,3469,3470,3473],{},[19,3471,3472],{},"Hidden Costs and Upgrades:"," New features or connectors may require premium tiers, forcing organizations into higher-cost plans.",[16,3475,3476],{},"Vendor lock-in becomes a critical concern for organizations that rely heavily on a single platform’s proprietary components. If a vendor changes pricing or discontinues certain features, customers have limited leverage. Beyond financial concerns, low-code platforms can also create technical constraints, limiting developers' skills and adaptability.",[1118,3478],{},[24,3480,3482],{"id":3481},"_5-skill-limitations-and-developmental-constraints","5. Skill Limitations and Developmental Constraints",[16,3484,3485],{},"Another pitfall of low-code adoption is the risk of creating a developer workforce that is narrowly focused on a single platform’s capabilities:",[48,3487,3488,3494,3500],{},[51,3489,3490,3493],{},[19,3491,3492],{},"Limited Skill Growth:"," Developers who spend years in a low-code environment may lack exposure to broader programming languages, frameworks, and architectural patterns, hindering both individual career growth and organizational innovation.",[51,3495,3496,3499],{},[19,3497,3498],{},"Inability to Pivot:"," When business needs shift to more complex solutions, teams may lack the deep technical expertise to transition smoothly to traditional development approaches.",[51,3501,3502,3505],{},[19,3503,3504],{},"Top-Down Misalignment:"," Many enterprises purchase low-code platforms at the executive level without involving experienced solution architects or developers, leading to solutions that fail to scale or align with the organization’s long-term strategy.",[16,3507,3508],{},"Executives should coordinate with senior architects and development teams when considering a low-code platform to ensure the chosen technology supports both immediate needs and future growth.",[1118,3510],{},[24,3512,3514],{"id":3513},"_9-the-limitations-of-low-code-for-complex-enterprise-solutions","9. The Limitations of Low-Code for Complex Enterprise Solutions",[16,3516,3517],{},"While low-code excels at rapid prototyping and small-scale applications, it often struggles to deliver robust, end-to-end solutions in large enterprises:",[48,3519,3520,3526,3532],{},[51,3521,3522,3525],{},[19,3523,3524],{},"Complex Workflows:"," Large-scale processes involving multiple departments, multi-step approvals, and regulatory compliance may exceed the platform’s capabilities.",[51,3527,3528,3531],{},[19,3529,3530],{},"Advanced Security and Compliance:"," Full solution development in heavily regulated sectors (e.g., finance, healthcare) usually requires security features not easily configured in low-code environments.",[51,3533,3534,3537],{},[19,3535,3536],{},"Multi-System Orchestration:"," Enterprise solutions frequently orchestrate tasks across numerous systems and data sources, demanding custom architectures and deeper code-level control than low-code typically provides.",[1118,3539],{},[24,3541,3543],{"id":3542},"_10-conclusion-avoiding-the-pitfalls-of-low-code","10. Conclusion: Avoiding the Pitfalls of Low-Code",[16,3545,3546],{},"While low-code platforms offer the advantage of accelerated development, they introduce substantial risks that organizations must critically assess. The perceived simplicity of these solutions can create an illusion of efficiency, leading to a dependency on non-technical personnel and the misconception that software development is inherently straightforward. This often results in long-term technical debt, increased operational costs, and development bottlenecks that negate the initial benefits.",[16,3548,3549],{},"Enterprises that integrate low-code solutions into their core infrastructure often encounter substantial challenges, including vendor lock-in, escalating licensing fees, and limited scalability. These platforms frequently lack the flexibility required to support enterprise-grade applications, necessitating costly refactoring and operational inefficiencies. Rather than relying on low-code as a primary strategy, organizations should explore development methodologies that combine the benefits of automation with the robustness of traditional software engineering.",[16,3551,3552,3555,3556],{},[19,3553,3554],{},"Before adopting"," a low-code solution, organizations should consult experienced solution architects to evaluate alternative approaches. By leveraging modular design principles, reusable code frameworks, and strategic automation, enterprises can achieve many of the advantages attributed to low-code—such as speed and efficiency—while preserving scalability, maintainability, and cost-effectiveness.",[1118,3557],{},[16,3559,3560,3563],{},[19,3561,3562],{},"Prioritizing skilled software engineering teams"," and adhering to best practices in system design will ultimately lead to more sustainable, adaptable, and economically viable digital transformation efforts.",[16,3565,3566],{},[1139,3567,3569],{"href":3568,"target":1142},"\u002Farticles\u002Fimages\u002Flowcode3.png",[156,3570],{"style":1145,"title":158,"src":3568,"alt":158,"width":2639,"height":1148},{"title":1080,"searchDepth":1081,"depth":1081,"links":3572},[3573,3574,3575,3576,3577,3578,3579,3580,3581],{"id":3346,"depth":1084,"text":3347},{"id":3221,"depth":1084,"text":3222},{"id":3357,"depth":1084,"text":3358},{"id":3379,"depth":1084,"text":3380},{"id":3417,"depth":1084,"text":3418},{"id":3449,"depth":1084,"text":3450},{"id":3481,"depth":1084,"text":3482},{"id":3513,"depth":1084,"text":3514},{"id":3542,"depth":1084,"text":3543},"2025-02-10","Low-code platforms offer rapid development and reduced reliance on IT teams, but they introduce significant risks that enterprises must carefully consider. While beneficial for small-scale applications and prototyping, low-code solutions often lead to vendor lock-in, escalating licensing costs, technical debt, and scalability challenges.","\u002Farticles\u002Fimages\u002Flowcode1.png",{},"\u002Farticles\u002F2025_02_lowcode-solutions",{"title":3341,"description":3583},"articles\u002F2025_02_lowcode-solutions",[1109,1110],"QzR69KsqIk62ovEAQdTy3zHYhrIPHvSAiKKMgI9CmRc",{"id":3592,"title":3593,"author":8,"body":3594,"createdAt":4150,"description":4151,"extension":1101,"img":4152,"meta":4153,"navigation":1104,"path":4154,"seo":4155,"stem":4156,"tags":4157,"updatedAt":4150,"__hash__":4158},"articles\u002Farticles\u002F2024_10_architecturalpatterns.md","Enterprise Architecture Frameworks",{"type":10,"value":3595,"toc":4139},[3596,3599,3601,3604,3608,3611,3614,3670,3673,3704,3711,3714,3717,3763,3766,3769,3815,3818,3821,3826,3828,3830,3844,3848,3851,3856,3860,3863,3866,3869,3882,3886,3889,3892,3895,3898,3901,3904,3907,3912,3925,3929,3932,3936,3939,3968,3970,3974,3977,4131,4133,4135,4137],[24,3597,3593],{"id":3598},"enterprise-architecture-frameworks",[24,3600,3222],{"id":3221},[16,3602,3603],{},"Let's explore four common enterprise architecture frameworks: TOGAF, Zachman Framework, MODAF, and SAFe. Each framework has its distinct use cases, structure, and target audience, making them suitable for different types of projects and organizational needs.",[24,3605,3607],{"id":3606},"_1-togaf-the-open-group-architecture-framework","1. TOGAF (The Open Group Architecture Framework)",[16,3609,3610],{},"TOGAF is an enterprise architecture framework that provides a detailed approach for designing, planning, implementing, and governing enterprise information architecture. It helps organizations align their IT goals with their overall business objectives. TOGAF consists of a structured method called the Architecture Development Method (ADM), which is used to create an enterprise-wide architecture.",[16,3612,3613],{},"TOGAF works through a well-defined process called the Architecture Development Method (ADM), which is iterative and consists of several phases. These phases include:",[2652,3615,3616,3622,3628,3634,3640,3646,3652,3658,3664],{},[51,3617,3618,3621],{},[19,3619,3620],{},"Preliminary Phase",": Establish the architecture framework and define the principles to guide the architecture work.",[51,3623,3624,3627],{},[19,3625,3626],{},"Architecture Vision",": Develop a high-level view of the intended architecture to align stakeholders and ensure buy-in.",[51,3629,3630,3633],{},[19,3631,3632],{},"Business Architecture",": Define the business strategy, governance, organization, and key business processes.",[51,3635,3636,3639],{},[19,3637,3638],{},"Information Systems Architectures",": Develop both the Data Architecture and the Application Architecture to support the business processes.",[51,3641,3642,3645],{},[19,3643,3644],{},"Technology Architecture",": Define the technology infrastructure needed to support the proposed architecture.",[51,3647,3648,3651],{},[19,3649,3650],{},"Opportunities and Solutions",": Identify potential solutions and transition plans to achieve the target architecture.",[51,3653,3654,3657],{},[19,3655,3656],{},"Migration Planning",": Create a detailed roadmap that shows how to move from the current state to the target architecture.",[51,3659,3660,3663],{},[19,3661,3662],{},"Implementation Governance",": Oversee the implementation to ensure alignment with the architectural vision.",[51,3665,3666,3669],{},[19,3667,3668],{},"Architecture Change Management",": Establish procedures for managing changes to the architecture as business needs evolve.",[16,3671,3672],{},"Each of these phases helps organizations systematically create, maintain, and govern their enterprise architecture, ensuring it supports both current and future business needs.",[16,3674,3675,3682,3684,3686,3688,3690,3691,3697,3698,3700,3702],{},[1139,3676,3678],{"href":3677,"target":1142},"\u002Farticles\u002Fimages\u002Fenterprise_arch1.png",[156,3679],{"style":1145,"title":158,"src":3677,"alt":158,"width":3680,"height":3681},531,729,[1118,3683],{},[1118,3685],{},[1118,3687],{},[1118,3689],{},"\nFor more information, visit ",[1139,3692,3696],{"href":3693,"rel":3694},"https:\u002F\u002Fwww.opengroup.org\u002Ftogaf",[3695],"nofollow","The Open Group",".\n",[1118,3699],{},[1118,3701],{},[1118,3703],{},[24,3705,3707,3708],{"id":3706},"_2-zachman-framework","2. ",[19,3709,3710],{},"Zachman Framework",[16,3712,3713],{},"The Zachman Framework is a structured approach for organizing and understanding an enterprise’s architecture through a matrix of viewpoints. It categorizes the different artifacts of an enterprise architecture into rows and columns to ensure that all critical perspectives (such as business, system, and technology) are captured. The framework is often used as a taxonomy for managing enterprise architecture.",[16,3715,3716],{},"The Zachman Framework is structured as a matrix with six columns and six rows, representing different aspects of an enterprise from multiple perspectives:",[48,3718,3719],{},[51,3720,3721,3724,3725],{},[19,3722,3723],{},"Columns",": The different interrogatives represented are:\n",[48,3726,3727,3733,3739,3745,3751,3757],{},[51,3728,3729,3732],{},[19,3730,3731],{},"What"," (data)",[51,3734,3735,3738],{},[19,3736,3737],{},"How"," (function)",[51,3740,3741,3744],{},[19,3742,3743],{},"Where"," (network)",[51,3746,3747,3750],{},[19,3748,3749],{},"Who"," (people)",[51,3752,3753,3756],{},[19,3754,3755],{},"When"," (time)",[51,3758,3759,3762],{},[19,3760,3761],{},"Why"," (motivation)",[16,3764,3765],{},"These columns help define the different aspects of the enterprise that need to be captured.",[16,3767,3768],{},"The rows represent different stakeholder perspectives:",[48,3770,3771],{},[51,3772,3773,3776,3777],{},[19,3774,3775],{},"Rows",": The different stakeholder perspectives represented are:\n",[48,3778,3779,3785,3791,3797,3803,3809],{},[51,3780,3781,3784],{},[19,3782,3783],{},"Scope"," (Planner)",[51,3786,3787,3790],{},[19,3788,3789],{},"Enterprise Model"," (Owner)",[51,3792,3793,3796],{},[19,3794,3795],{},"System Model"," (Designer)",[51,3798,3799,3802],{},[19,3800,3801],{},"Technology Model"," (Builder)",[51,3804,3805,3808],{},[19,3806,3807],{},"Detailed Representations"," (Subcontractor)",[51,3810,3811,3814],{},[19,3812,3813],{},"Functioning Enterprise"," (User)",[16,3816,3817],{},"Each row provides a view that is essential for a comprehensive understanding of the architecture, ranging from a high-level business overview to detailed implementation details.",[16,3819,3820],{},"By using this combination of columns and rows, the Zachman Framework ensures that all critical elements of an enterprise are covered, from strategic goals to technical implementation. This structured approach facilitates better communication between stakeholders and helps ensure that every aspect of the enterprise is aligned with business goals.",[156,3822],{"style":1145,"title":158,"src":3823,"alt":158,"width":3824,"height":3825},"\u002Farticles\u002Fimages\u002Fenterprise_arch2.png",794,513,[1118,3827],{},[1118,3829],{},[16,3831,3832,3833,3697,3838,3840,3842],{},"For more information, visit ",[1139,3834,3837],{"href":3835,"rel":3836},"https:\u002F\u002Fwww.zachman.com\u002F",[3695],"Zachman International",[1118,3839],{},[1118,3841],{},[1118,3843],{},[24,3845,3847],{"id":3846},"_3-modaf-ministry-of-defence-architecture-framework","3. MODAF (Ministry of Defence Architecture Framework)",[16,3849,3850],{},"MODAF is an enterprise architecture framework used by the UK Ministry of Defence to model, document, and understand complex defense systems and processes. It provides a way to visualize the relationships between systems, capabilities, and organizational processes. MODAF focuses on ensuring that all stakeholders, particularly in the defense domain, have a clear view of the systems and their interactions.",[156,3852],{"style":1145,"title":158,"src":3853,"alt":158,"width":3854,"height":3855},"\u002Farticles\u002Fimages\u002Fenterprise_arch3.png",959,717,[1150,3857,3859],{"id":3858},"comparison-with-togaf-and-zachman","Comparison with TOGAF and Zachman",[16,3861,3862],{},"MODAF, TOGAF, and the Zachman Framework each provide distinct approaches to enterprise architecture. MODAF is specifically tailored for defense systems, focusing on capabilities, systems, and the relationships between them. It is particularly suited for military and government use, where high levels of detail, security, and interoperability are crucial.",[16,3864,3865],{},"In contrast, TOGAF is more generic and applicable across different industries. It focuses on aligning IT with business strategy using a structured methodology known as the Architecture Development Method (ADM). TOGAF is iterative and modular, which makes it adaptable for a wide range of enterprises beyond the defense sector.",[16,3867,3868],{},"The Zachman Framework, on the other hand, offers a comprehensive taxonomy by organizing enterprise artifacts into a matrix of rows and columns. It ensures that all critical elements are covered from multiple stakeholder perspectives. Unlike MODAF, which is domain-specific, Zachman is not prescriptive about implementation and is suitable for capturing enterprise complexity in a highly detailed manner, but without providing specific methodologies for execution.",[16,3870,3832,3871,3697,3876,3878,3880],{},[1139,3872,3875],{"href":3873,"rel":3874},"https:\u002F\u002Fwww.gov.uk\u002Fguidance\u002Fmod-architecture-framework",[3695],"UK Ministry of Defence",[1118,3877],{},[1118,3879],{},[1118,3881],{},[24,3883,3885],{"id":3884},"_4-safe-scaled-agile-framework","4. SAFe (Scaled Agile Framework)",[16,3887,3888],{},"SAFe is a framework designed to help organizations scale agile practices across large enterprises and multiple teams. It integrates lean and agile principles to provide guidance on roles, responsibilities, and best practices for managing large-scale projects. SAFe emphasizes the alignment of teams toward a shared goal, effective collaboration, and regular delivery of value. It also provides a set of tools and techniques that help organizations manage complex product development while ensuring a consistent and high-quality output.",[16,3890,3891],{},"Benefits of SAFe",[16,3893,3894],{},"Scalable Agile Practices: SAFe enables the effective scaling of agile principles across multiple teams and departments within a large organization.",[16,3896,3897],{},"Alignment with Business Objectives: SAFe ensures that all teams work toward common business goals, improving the overall strategic alignment of the organization.",[16,3899,3900],{},"Continuous Improvement: SAFe integrates lean and agile principles to foster a culture of continuous improvement, leading to better performance over time.",[16,3902,3903],{},"Enhanced Collaboration: The framework provides structured roles and responsibilities to facilitate collaboration across teams and departments.",[16,3905,3906],{},"Regular Value Delivery: Through iterative development, SAFe ensures frequent and consistent delivery of value to stakeholders, which improves customer satisfaction.",[156,3908],{"style":1145,"title":158,"src":3909,"alt":158,"width":3910,"height":3911},"\u002Farticles\u002Fimages\u002Fenterprise_arch4.png",988,659,[16,3913,3832,3914,3697,3919,3921,3923],{},[1139,3915,3918],{"href":3916,"rel":3917},"https:\u002F\u002Fwww.scaledagileframework.com\u002F",[3695],"Scaled Agile Framework",[1118,3920],{},[1118,3922],{},[1118,3924],{},[24,3926,3928],{"id":3927},"_5-agile-framework","5. Agile Framework",[16,3930,3931],{},"The Agile Framework is a flexible methodology that emphasizes iterative development, collaboration, and continuous feedback. Agile focuses on delivering small, functional increments of software, allowing for rapid adaptation to changes in customer requirements. Agile is well-suited for projects where requirements are expected to evolve, and it encourages cross-functional teams to work closely together.",[1150,3933,3935],{"id":3934},"comparison-with-safe","Comparison with SAFe",[16,3937,3938],{},"While both Agile and SAFe promote iterative development and collaboration, they serve different organizational scopes. Agile is typically used by smaller teams working independently, allowing for flexibility and quick adjustments. In contrast, SAFe is designed to scale agile principles across large enterprises involving multiple teams. SAFe includes structured roles, responsibilities, and coordination mechanisms to ensure alignment across the entire organization, making it effective for managing complex projects with numerous interdependencies.",[16,3940,3941,3942,3944,3946,3948,3950,3955,3957,3959,3961,3690,3963,1200],{},"SAFe is a framework designed to help organizations scale agile practices across large enterprises and multiple teams. It integrates lean and agile principles to provide guidance on roles, responsibilities, and best practices for managing large-scale projects. SAFe emphasizes the alignment of teams toward a shared goal, effective collaboration, and regular delivery of value.\n",[1118,3943],{},[1118,3945],{},[1118,3947],{},[1118,3949],{},[156,3951],{"style":1145,"title":158,"src":3952,"alt":158,"width":3953,"height":3954},"\u002Farticles\u002Fimages\u002Fenterprise_arch5.png",519,407,[1118,3956],{},[1118,3958],{},[1118,3960],{},[1118,3962],{},[1139,3964,3967],{"href":3965,"rel":3966},"https:\u002F\u002Fwww.agilealliance.org\u002Fagile101\u002F",[3695],"Agile Alliance",[1118,3969],{},[24,3971,3973],{"id":3972},"comparison-of-architectures","Comparison of Architectures",[16,3975,3976],{},"Below is a table comparing the features of TOGAF, Zachman Framework, MODAF, and SAFe:",[2014,3978,3979,3997],{},[2017,3980,3981],{},[2020,3982,3983,3986,3989,3991,3994],{},[2023,3984,3985],{},"Feature",[2023,3987,3988],{},"TOGAF",[2023,3990,3710],{},[2023,3992,3993],{},"MODAF",[2023,3995,3996],{},"SAFe",[2037,3998,3999,4018,4036,4055,4074,4093,4112],{},[2020,4000,4001,4006,4009,4012,4015],{},[2042,4002,4003],{},[19,4004,4005],{},"Purpose",[2042,4007,4008],{},"Enterprise architecture planning",[2042,4010,4011],{},"Taxonomy for enterprise architecture",[2042,4013,4014],{},"Defense systems modeling",[2042,4016,4017],{},"Scaling agile practices",[2020,4019,4020,4024,4027,4030,4033],{},[2042,4021,4022],{},[19,4023,3783],{},[2042,4025,4026],{},"Business, data, application, technology",[2042,4028,4029],{},"Business, system, technology views",[2042,4031,4032],{},"Systems, capabilities, processes",[2042,4034,4035],{},"Teams, programs, portfolios",[2020,4037,4038,4043,4046,4049,4052],{},[2042,4039,4040],{},[19,4041,4042],{},"Structure",[2042,4044,4045],{},"Architecture Development Method (ADM)",[2042,4047,4048],{},"Matrix of viewpoints (rows & columns)",[2042,4050,4051],{},"Layered views (e.g., capability, system)",[2042,4053,4054],{},"Levels: Team, Program, Portfolio",[2020,4056,4057,4062,4065,4068,4071],{},[2042,4058,4059],{},[19,4060,4061],{},"Target Audience",[2042,4063,4064],{},"Enterprise architects, IT managers",[2042,4066,4067],{},"Enterprise architects, stakeholders",[2042,4069,4070],{},"Defense and government stakeholders",[2042,4072,4073],{},"Agile teams, enterprise stakeholders",[2020,4075,4076,4081,4084,4087,4090],{},[2042,4077,4078],{},[19,4079,4080],{},"Level of Detail",[2042,4082,4083],{},"High-level to detailed architectural design",[2042,4085,4086],{},"Detailed categorization of components",[2042,4088,4089],{},"High-level defense capability mapping",[2042,4091,4092],{},"Operational and tactical agile practices",[2020,4094,4095,4100,4103,4106,4109],{},[2042,4096,4097],{},[19,4098,4099],{},"Technology Specificity",[2042,4101,4102],{},"Technology-agnostic, adaptable to .NET",[2042,4104,4105],{},"Technology-agnostic",[2042,4107,4108],{},"Often government\u002Fdefense-specific",[2042,4110,4111],{},"Supports various technologies including .NET",[2020,4113,4114,4119,4122,4125,4128],{},[2042,4115,4116],{},[19,4117,4118],{},"Implementation with .NET",[2042,4120,4121],{},"Suitable for modular applications, SOA, microservices",[2042,4123,4124],{},"Useful for ensuring holistic system design",[2042,4126,4127],{},"Suitable for secure, interoperable defense solutions",[2042,4129,4130],{},"Ideal for iterative development using Azure DevOps",[1118,4132],{},[1118,4134],{},[1118,4136],{},[1118,4138],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":4140},[4141,4142,4143,4144,4146,4147,4148,4149],{"id":3598,"depth":1084,"text":3593},{"id":3221,"depth":1084,"text":3222},{"id":3606,"depth":1084,"text":3607},{"id":3706,"depth":1084,"text":4145},"2. Zachman Framework",{"id":3846,"depth":1084,"text":3847},{"id":3884,"depth":1084,"text":3885},{"id":3927,"depth":1084,"text":3928},{"id":3972,"depth":1084,"text":3973},"2024-10-10","Lets explore four common enterprise architecture frameworks TOGAF, Zachman Framework, MODAF, SAFe and Agile . Each framework has its distinct use cases, structure, and target audience, making them suitable for different types of projects and organizational needs","\u002Farticles\u002Fimages\u002Fenterprise_arch0.png",{},"\u002Farticles\u002F2024_10_architecturalpatterns",{"title":3593,"description":4151},"articles\u002F2024_10_architecturalpatterns",[1109,1110],"RzsZu2Zsit30hDIYRLavM7S0_BCoeCTOE5OBHWaYPrc",{"id":4160,"title":4161,"author":1915,"body":4162,"createdAt":4693,"description":4694,"extension":1101,"img":4695,"meta":4696,"navigation":1104,"path":4697,"seo":4698,"stem":4699,"tags":4700,"updatedAt":4693,"__hash__":4702},"articles\u002Farticles\u002Fgoogletakeout-extract-script.md","Extracting Specific Files from Zip Archives with a Python Script",{"type":10,"value":4163,"toc":4685},[4164,4167,4170,4173,4176,4178,4180,4184,4200,4204,4207,4525,4529,4602,4606,4619,4648,4655,4671,4674,4678,4681],[24,4165,4161],{"id":4166},"extracting-specific-files-from-zip-archives-with-a-python-script",[16,4168,4169],{},"When managing large amounts of data, especially backups from services like Google Photos, you may find yourself dealing with numerous zip files. Manually extracting specific files from these archives can be tedious. Fortunately, Python offers a powerful way to automate this process.",[16,4171,4172],{},"In this blog post, I'll show you how to create a Python script that extracts files from zip archives to a specific path on your hard drive. You can specify a particular path within each zip file to extract files from, making it ideal for organizing photos or other data from Google backups.  The script below will iterate over each zip file within\nthe directory and perform the same extraction from within each zip to another target directory.  In our particular case we had 17 - 10 gb zip files and we need to iterate over each to extract the photos.",[156,4174],{"style":1145,"src":4175,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fpythonscript.jpg",[1118,4177],{},[1118,4179],{},[24,4181,4183],{"id":4182},"prerequisites","Prerequisites",[16,4185,4186,4187,4192,4193,1158,4196,4199],{},"Before we dive into the script, ensure you have Python installed on your machine. You can download it from ",[1139,4188,4191],{"href":4189,"rel":4190},"https:\u002F\u002Fwww.python.org\u002F",[3695],"python.org",". You'll also need the ",[2239,4194,4195],{},"zipfile",[2239,4197,4198],{},"os"," modules, which are part of Python's standard library, so no additional installations are required.",[24,4201,4203],{"id":4202},"the-script","The Script",[16,4205,4206],{},"Here's the Python script to extract files from zip archives:",[2232,4208,4212],{"className":4209,"code":4210,"language":4211,"meta":1080,"style":1080},"language-python shiki shiki-themes github-light github-dark","import os\nimport zipfile\n\ndef extract_specific_path_from_zip(source_dir, dest_dir, specific_path):\n    # Ensure destination directory exists\n    if not os.path.exists(dest_dir):\n        os.makedirs(dest_dir)\n    \n    # Loop through all files in the source directory\n    for item in os.listdir(source_dir):\n        # Construct full file path\n        file_path = os.path.join(source_dir, item)\n        \n        # Check if the file is a ZIP file\n        if zipfile.is_zipfile(file_path):\n            # Open the ZIP file\n            with zipfile.ZipFile(file_path, 'r') as zip_ref:\n                # Get the list of all archived file names from the zip\n                zip_file_names = zip_ref.namelist()\n                \n                # Filter the files that match the specific path\n                files_to_extract = [f for f in zip_file_names if f.startswith(specific_path)]\n                \n                # Extract the filtered files preserving the directory structure below the specific path\n                for file in files_to_extract:\n                    try:\n                        # Determine the relative path within the specific path\n                        relative_path = os.path.relpath(file, specific_path)\n                        \n                        # Determine the output file path\n                        output_file_path = os.path.join(dest_dir, relative_path)\n                        \n                        # Normalize the output file path to handle any issues with invalid characters or spaces\n                        output_file_path = os.path.normpath(output_file_path)\n                        \n                        # Ensure the directory exists\n                        os.makedirs(os.path.dirname(output_file_path), exist_ok=True)\n                        \n                        # Extract the file data and write to the destination directory\n                        with zip_ref.open(file) as source_file:\n                            with open(output_file_path, 'wb') as output_file:\n                                output_file.write(source_file.read())\n                        \n                        print(f\"Extracted: {file} from {file_path} to {output_file_path}\")\n                    except Exception as e:\n                        print(f\"Failed to extract {file} from {file_path}. Error: {e}\")\n\nif __name__ == \"__main__\":\n    source_directory = \"C:\u002FTemp\u002FMay23_BrittmarieGoogleBackup\"  # Replace with the path to the source directory\n    destination_directory = \"G:\u002FHome_PC\u002FPictures\u002F2023-06-23\"  # Replace with the path to the destination directory\n    specific_path_in_zip = \"Takeout\u002FGoogle Photos\"  # Replace with the specific path to extract from each ZIP file\n\n    extract_specific_path_from_zip(source_directory, destination_directory, specific_path_in_zip)\n","python",[2239,4213,4214,4222,4227,4232,4238,4244,4250,4256,4262,4268,4274,4280,4286,4292,4298,4304,4310,4316,4322,4328,4334,4340,4346,4351,4357,4363,4369,4375,4381,4387,4393,4399,4404,4410,4416,4421,4427,4433,4438,4444,4450,4456,4462,4467,4473,4479,4485,4490,4496,4502,4508,4514,4519],{"__ignoreMap":1080},[4215,4216,4219],"span",{"class":4217,"line":4218},"line",1,[4215,4220,4221],{},"import os\n",[4215,4223,4224],{"class":4217,"line":1081},[4215,4225,4226],{},"import zipfile\n",[4215,4228,4229],{"class":4217,"line":1084},[4215,4230,4231],{"emptyLinePlaceholder":1104},"\n",[4215,4233,4235],{"class":4217,"line":4234},4,[4215,4236,4237],{},"def extract_specific_path_from_zip(source_dir, dest_dir, specific_path):\n",[4215,4239,4241],{"class":4217,"line":4240},5,[4215,4242,4243],{},"    # Ensure destination directory exists\n",[4215,4245,4247],{"class":4217,"line":4246},6,[4215,4248,4249],{},"    if not os.path.exists(dest_dir):\n",[4215,4251,4253],{"class":4217,"line":4252},7,[4215,4254,4255],{},"        os.makedirs(dest_dir)\n",[4215,4257,4259],{"class":4217,"line":4258},8,[4215,4260,4261],{},"    \n",[4215,4263,4265],{"class":4217,"line":4264},9,[4215,4266,4267],{},"    # Loop through all files in the source directory\n",[4215,4269,4271],{"class":4217,"line":4270},10,[4215,4272,4273],{},"    for item in os.listdir(source_dir):\n",[4215,4275,4277],{"class":4217,"line":4276},11,[4215,4278,4279],{},"        # Construct full file path\n",[4215,4281,4283],{"class":4217,"line":4282},12,[4215,4284,4285],{},"        file_path = os.path.join(source_dir, item)\n",[4215,4287,4289],{"class":4217,"line":4288},13,[4215,4290,4291],{},"        \n",[4215,4293,4295],{"class":4217,"line":4294},14,[4215,4296,4297],{},"        # Check if the file is a ZIP file\n",[4215,4299,4301],{"class":4217,"line":4300},15,[4215,4302,4303],{},"        if zipfile.is_zipfile(file_path):\n",[4215,4305,4307],{"class":4217,"line":4306},16,[4215,4308,4309],{},"            # Open the ZIP file\n",[4215,4311,4313],{"class":4217,"line":4312},17,[4215,4314,4315],{},"            with zipfile.ZipFile(file_path, 'r') as zip_ref:\n",[4215,4317,4319],{"class":4217,"line":4318},18,[4215,4320,4321],{},"                # Get the list of all archived file names from the zip\n",[4215,4323,4325],{"class":4217,"line":4324},19,[4215,4326,4327],{},"                zip_file_names = zip_ref.namelist()\n",[4215,4329,4331],{"class":4217,"line":4330},20,[4215,4332,4333],{},"                \n",[4215,4335,4337],{"class":4217,"line":4336},21,[4215,4338,4339],{},"                # Filter the files that match the specific path\n",[4215,4341,4343],{"class":4217,"line":4342},22,[4215,4344,4345],{},"                files_to_extract = [f for f in zip_file_names if f.startswith(specific_path)]\n",[4215,4347,4349],{"class":4217,"line":4348},23,[4215,4350,4333],{},[4215,4352,4354],{"class":4217,"line":4353},24,[4215,4355,4356],{},"                # Extract the filtered files preserving the directory structure below the specific path\n",[4215,4358,4360],{"class":4217,"line":4359},25,[4215,4361,4362],{},"                for file in files_to_extract:\n",[4215,4364,4366],{"class":4217,"line":4365},26,[4215,4367,4368],{},"                    try:\n",[4215,4370,4372],{"class":4217,"line":4371},27,[4215,4373,4374],{},"                        # Determine the relative path within the specific path\n",[4215,4376,4378],{"class":4217,"line":4377},28,[4215,4379,4380],{},"                        relative_path = os.path.relpath(file, specific_path)\n",[4215,4382,4384],{"class":4217,"line":4383},29,[4215,4385,4386],{},"                        \n",[4215,4388,4390],{"class":4217,"line":4389},30,[4215,4391,4392],{},"                        # Determine the output file path\n",[4215,4394,4396],{"class":4217,"line":4395},31,[4215,4397,4398],{},"                        output_file_path = os.path.join(dest_dir, relative_path)\n",[4215,4400,4402],{"class":4217,"line":4401},32,[4215,4403,4386],{},[4215,4405,4407],{"class":4217,"line":4406},33,[4215,4408,4409],{},"                        # Normalize the output file path to handle any issues with invalid characters or spaces\n",[4215,4411,4413],{"class":4217,"line":4412},34,[4215,4414,4415],{},"                        output_file_path = os.path.normpath(output_file_path)\n",[4215,4417,4419],{"class":4217,"line":4418},35,[4215,4420,4386],{},[4215,4422,4424],{"class":4217,"line":4423},36,[4215,4425,4426],{},"                        # Ensure the directory exists\n",[4215,4428,4430],{"class":4217,"line":4429},37,[4215,4431,4432],{},"                        os.makedirs(os.path.dirname(output_file_path), exist_ok=True)\n",[4215,4434,4436],{"class":4217,"line":4435},38,[4215,4437,4386],{},[4215,4439,4441],{"class":4217,"line":4440},39,[4215,4442,4443],{},"                        # Extract the file data and write to the destination directory\n",[4215,4445,4447],{"class":4217,"line":4446},40,[4215,4448,4449],{},"                        with zip_ref.open(file) as source_file:\n",[4215,4451,4453],{"class":4217,"line":4452},41,[4215,4454,4455],{},"                            with open(output_file_path, 'wb') as output_file:\n",[4215,4457,4459],{"class":4217,"line":4458},42,[4215,4460,4461],{},"                                output_file.write(source_file.read())\n",[4215,4463,4465],{"class":4217,"line":4464},43,[4215,4466,4386],{},[4215,4468,4470],{"class":4217,"line":4469},44,[4215,4471,4472],{},"                        print(f\"Extracted: {file} from {file_path} to {output_file_path}\")\n",[4215,4474,4476],{"class":4217,"line":4475},45,[4215,4477,4478],{},"                    except Exception as e:\n",[4215,4480,4482],{"class":4217,"line":4481},46,[4215,4483,4484],{},"                        print(f\"Failed to extract {file} from {file_path}. Error: {e}\")\n",[4215,4486,4488],{"class":4217,"line":4487},47,[4215,4489,4231],{"emptyLinePlaceholder":1104},[4215,4491,4493],{"class":4217,"line":4492},48,[4215,4494,4495],{},"if __name__ == \"__main__\":\n",[4215,4497,4499],{"class":4217,"line":4498},49,[4215,4500,4501],{},"    source_directory = \"C:\u002FTemp\u002FMay23_BrittmarieGoogleBackup\"  # Replace with the path to the source directory\n",[4215,4503,4505],{"class":4217,"line":4504},50,[4215,4506,4507],{},"    destination_directory = \"G:\u002FHome_PC\u002FPictures\u002F2023-06-23\"  # Replace with the path to the destination directory\n",[4215,4509,4511],{"class":4217,"line":4510},51,[4215,4512,4513],{},"    specific_path_in_zip = \"Takeout\u002FGoogle Photos\"  # Replace with the specific path to extract from each ZIP file\n",[4215,4515,4517],{"class":4217,"line":4516},52,[4215,4518,4231],{"emptyLinePlaceholder":1104},[4215,4520,4522],{"class":4217,"line":4521},53,[4215,4523,4524],{},"    extract_specific_path_from_zip(source_directory, destination_directory, specific_path_in_zip)\n",[24,4526,4528],{"id":4527},"how-it-works","How It Works",[2652,4530,4531,4542,4572,4578,4584,4590,4596],{},[51,4532,4533,4536,4537,1158,4539,4541],{},[19,4534,4535],{},"Import Modules",": The script begins by importing the ",[2239,4538,4195],{},[2239,4540,4198],{}," modules.",[51,4543,4544,4547,4548,4551,4552],{},[19,4545,4546],{},"Function Definition",": The ",[2239,4549,4550],{},"extract_specific_path_from_zip"," function takes three parameters:\n",[48,4553,4554,4560,4566],{},[51,4555,4556,4559],{},[2239,4557,4558],{},"source_dir",": The directory containing the zip files you want to extract files from.",[51,4561,4562,4565],{},[2239,4563,4564],{},"dest_dir",": The directory where you want the extracted files to be saved.",[51,4567,4568,4571],{},[2239,4569,4570],{},"specific_path",": The specific path within each zip file from which you want to extract files.",[51,4573,4574,4577],{},[19,4575,4576],{},"Ensure Destination Directory Exists",": The script checks if the destination directory exists and creates it if necessary.",[51,4579,4580,4583],{},[19,4581,4582],{},"Loop Through Source Directory",": It loops through all files in the source directory, checking each one to see if it's a zip file.",[51,4585,4586,4589],{},[19,4587,4588],{},"Open Zip File",": For each zip file, the script opens it and lists all the files within the zip archive.",[51,4591,4592,4595],{},[19,4593,4594],{},"Filter Files",": The script filters the files based on the specified path within the zip file.",[51,4597,4598,4601],{},[19,4599,4600],{},"Extract Files",": For each filtered file, the script constructs the target file path, creates necessary directories, and writes the file to the target path, handling any issues with invalid characters or spaces.",[24,4603,4605],{"id":4604},"usage","Usage",[16,4607,4608,4609,3091,4612,3145,4615,4618],{},"To use this script, replace the placeholder values for ",[2239,4610,4611],{},"source_directory",[2239,4613,4614],{},"destination_directory",[2239,4616,4617],{},"specific_path_in_zip"," with your specific paths. For example, if you want to extract all photos from a Google Photos backup, you might have:",[2232,4620,4622],{"className":4209,"code":4621,"language":4211,"meta":1080,"style":1080},"if __name__ == \"__main__\":\n    source_directory = \"C:\u002FTemp\u002FMay23_BrittmarieGoogleBackup\"  # Replace with the path to the source directory\n    destination_directory = \"G:\u002FHome_PC\u002FPictures\u002F2023-06-23\"  # Replace with the path to the destination directory\n    specific_path_in_zip = \"Takeout\u002FGoogle Photos\"  # Replace with the specific path to extract from each ZIP file\n\n    extract_specific_path_from_zip(source_directory, destination_directory, specific_path_in_zip)\n",[2239,4623,4624,4628,4632,4636,4640,4644],{"__ignoreMap":1080},[4215,4625,4626],{"class":4217,"line":4218},[4215,4627,4495],{},[4215,4629,4630],{"class":4217,"line":1081},[4215,4631,4501],{},[4215,4633,4634],{"class":4217,"line":1084},[4215,4635,4507],{},[4215,4637,4638],{"class":4217,"line":4234},[4215,4639,4513],{},[4215,4641,4642],{"class":4217,"line":4240},[4215,4643,4231],{"emptyLinePlaceholder":1104},[4215,4645,4646],{"class":4217,"line":4246},[4215,4647,4524],{},[16,4649,4650,4651,4654],{},"Save the script as ",[2239,4652,4653],{},"extract_photos.py"," and run it using:",[2232,4656,4660],{"className":4657,"code":4658,"language":4659,"meta":1080,"style":1080},"language-bash shiki shiki-themes github-light github-dark","python extract_photos.py\n","bash",[2239,4661,4662],{"__ignoreMap":1080},[4215,4663,4664,4667],{"class":4217,"line":4218},[4215,4665,4211],{"class":4666},"sScJk",[4215,4668,4670],{"class":4669},"sZZnC"," extract_photos.py\n",[16,4672,4673],{},"This script will extract all files from the specified path within each zip archive and save them to your target directory, maintaining the directory structure.",[24,4675,4677],{"id":4676},"conclusion","Conclusion",[16,4679,4680],{},"This updated Python script is a handy tool for automating the extraction of specific files from zip archives. Whether you're organizing photos from Google or managing backups, this script can save you time and effort. Happy coding!",[4682,4683,4684],"style",{},"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);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":1080,"searchDepth":1081,"depth":1081,"links":4686},[4687,4688,4689,4690,4691,4692],{"id":4166,"depth":1084,"text":4161},{"id":4182,"depth":1084,"text":4183},{"id":4202,"depth":1084,"text":4203},{"id":4527,"depth":1084,"text":4528},{"id":4604,"depth":1084,"text":4605},{"id":4676,"depth":1084,"text":4677},"2024-06-23T15:44:03.462Z","In this blog post, I'll show you how to create a Python script that extracts files from zip archives to a specific path on your hard drive.  Google Takeout will allow users to extract all of their Google Photos to any number of large zip files.  After downloading, you are still required to extract to your own file system.  This script can help that by iterating over each zip and perform the extraction.","\u002Farticles\u002Fimages\u002Fpythonscript2.jpg",{},"\u002Farticles\u002Fgoogletakeout-extract-script",{"title":4161,"description":4694},"articles\u002Fgoogletakeout-extract-script",[4701],"tools","X2MHVj0WJ__COABevlzA2jaK7l4Y6ysibzyoJIiF5iU",{"id":4704,"title":4705,"author":1915,"body":4706,"createdAt":5079,"description":5080,"extension":1101,"img":5081,"meta":5082,"navigation":1104,"path":5083,"seo":5084,"stem":5085,"tags":5086,"updatedAt":5079,"__hash__":5088},"articles\u002Farticles\u002Fazure-appservices-containersapps.md","Comparing Azure App Services and Azure Container Apps Features Benefits Pros and Cons",{"type":10,"value":4707,"toc":5071},[4708,4712,4715,4718,4720,4722,4726,4732,4737,4769,4774,4800,4805,4825,4829,4834,4838,4870,4874,4899,4903,4923,4927,4933,4939,4943,4946,5054,5056,5058,5063,5068],[24,4709,4711],{"id":4710},"comparing-azure-app-services-and-azure-container-apps-features-benefits-pros-and-cons","Comparing Azure App Services and Azure Container Apps: Features, Benefits, Pros, and Cons",[16,4713,4714],{},"When deploying and managing applications on Azure, two prominent options stand out: Azure App Services and Azure Container Apps. Both cater to different use cases and offer distinct features. Here, we'll dive into their differences, benefits, pros, and cons, and examine their performance features.",[156,4716],{"style":1145,"src":4717,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fappservices_vs_containerapps_2.png",[1118,4719],{},[1118,4721],{},[24,4723,4725],{"id":4724},"azure-app-services","Azure App Services",[16,4727,4728,4731],{},[19,4729,4730],{},"Overview:","\nAzure App Services is a platform-as-a-service (PaaS) offering that allows developers to build, deploy, and scale web apps, mobile backends, and RESTful APIs.",[16,4733,4734],{},[19,4735,4736],{},"Benefits:",[48,4738,4739,4745,4751,4757,4763],{},[51,4740,4741,4744],{},[19,4742,4743],{},"Managed Environment:"," Handles infrastructure management, including patching and scaling.",[51,4746,4747,4750],{},[19,4748,4749],{},"Integrated Development Environment:"," Supports multiple languages and frameworks like .NET, Java, Node.js, PHP, Python, and Ruby.",[51,4752,4753,4756],{},[19,4754,4755],{},"Deployment Options:"," Facilitates continuous integration and deployment with GitHub, Azure DevOps, and other CI\u002FCD tools.",[51,4758,4759,4762],{},[19,4760,4761],{},"Built-in Services:"," Includes load balancing, auto-scaling, and built-in monitoring and diagnostics.",[51,4764,4765,4768],{},[19,4766,4767],{},"Security:"," Offers SSL certificates, custom domain names, and compliance with industry standards.",[16,4770,4771],{},[19,4772,4773],{},"Pros:",[48,4775,4776,4782,4788,4794],{},[51,4777,4778,4781],{},[19,4779,4780],{},"Ease of Use:"," Simplified deployment and management with minimal configuration.",[51,4783,4784,4787],{},[19,4785,4786],{},"Scalability:"," Automatically scales up or out based on demand.",[51,4789,4790,4793],{},[19,4791,4792],{},"Integration:"," Seamless integration with other Azure services (e.g., Azure SQL Database, Azure Storage).",[51,4795,4796,4799],{},[19,4797,4798],{},"Cost Management:"," Flexible pricing plans, including a free tier for basic apps.",[16,4801,4802],{},[19,4803,4804],{},"Cons:",[48,4806,4807,4813,4819],{},[51,4808,4809,4812],{},[19,4810,4811],{},"Limited Customization:"," Limited control over the underlying infrastructure.",[51,4814,4815,4818],{},[19,4816,4817],{},"Dependency on Azure Ecosystem:"," Strongly tied to Azure services, which might be a drawback for multi-cloud strategies.",[51,4820,4821,4824],{},[19,4822,4823],{},"Complexity in Advanced Scenarios:"," May require workarounds or additional services for complex scenarios like multi-region deployments or specific compliance requirements.",[24,4826,4828],{"id":4827},"azure-container-apps","Azure Container Apps",[16,4830,4831,4833],{},[19,4832,4730],{},"\nAzure Container Apps is a serverless container service designed to build and deploy modern applications using microservices and container orchestration.",[16,4835,4836],{},[19,4837,4736],{},[48,4839,4840,4846,4852,4858,4864],{},[51,4841,4842,4845],{},[19,4843,4844],{},"Serverless:"," Abstracts the underlying infrastructure, allowing developers to focus on application logic.",[51,4847,4848,4851],{},[19,4849,4850],{},"Microservices Support:"," Ideal for deploying applications composed of multiple microservices.",[51,4853,4854,4857],{},[19,4855,4856],{},"Flexibility:"," Supports any containerized application, irrespective of the programming language or framework.",[51,4859,4860,4863],{},[19,4861,4862],{},"Event-driven Architecture:"," Integrates with Azure Event Grid, Azure Functions, and other event-driven services.",[51,4865,4866,4869],{},[19,4867,4868],{},"Auto-scaling:"," Automatically scales based on HTTP traffic or custom metrics.",[16,4871,4872],{},[19,4873,4773],{},[48,4875,4876,4882,4888,4893],{},[51,4877,4878,4881],{},[19,4879,4880],{},"Agility:"," Quick to deploy and update containerized applications.",[51,4883,4884,4887],{},[19,4885,4886],{},"Granular Control:"," More control over the runtime environment compared to App Services.",[51,4889,4890,4892],{},[19,4891,4786],{}," Efficient scaling at the container level, supporting spikes in demand.",[51,4894,4895,4898],{},[19,4896,4897],{},"Portability:"," Containers can be moved across different environments, including on-premises and other cloud providers.",[16,4900,4901],{},[19,4902,4804],{},[48,4904,4905,4911,4917],{},[51,4906,4907,4910],{},[19,4908,4909],{},"Complexity:"," Requires understanding of containerization and orchestration concepts.",[51,4912,4913,4916],{},[19,4914,4915],{},"Cold Start Latency:"," Potential cold start issues similar to other serverless offerings.",[51,4918,4919,4922],{},[19,4920,4921],{},"Resource Management:"," Although managed, you still need to handle aspects like container lifecycle and resource optimization.",[24,4924,4926],{"id":4925},"performance-features-comparison","Performance Features Comparison",[16,4928,4929,4930,4932],{},"When comparing performance features, Azure App Services and Azure Container Apps offer distinct capabilities tailored to their respective use cases. ",[19,4931,4725],{}," provides performance optimization through automatic scaling, load balancing, and built-in caching mechanisms. It supports scaling both vertically (increasing the power of existing instances) and horizontally (adding more instances) based on predefined metrics or schedules. App Services also integrates seamlessly with Azure CDN for improved global performance and Azure Traffic Manager for efficient traffic distribution.",[16,4934,4935,4936,4938],{},"In contrast, ",[19,4937,4828],{}," leverages Kubernetes-based orchestration under the hood, offering granular control over performance tuning. It excels in handling microservices architectures, allowing individual containers to scale independently based on specific metrics, such as CPU and memory usage. This fine-grained scaling ensures optimal resource utilization and performance efficiency for each microservice. Container Apps also support advanced networking features, such as service mesh integration, which enhances performance by optimizing service-to-service communication within the application.",[24,4940,4942],{"id":4941},"when-to-use-each-service","When to Use Each Service",[16,4944,4945],{},"Here's a table summarizing when each service is well suited:",[2014,4947,4948,4964],{},[2017,4949,4950],{},[2020,4951,4952,4956,4960],{},[2023,4953,4954],{},[19,4955,2294],{},[2023,4957,4958],{},[19,4959,4725],{},[2023,4961,4962],{},[19,4963,4828],{},[2037,4965,4966,4977,4988,4999,5010,5021,5032,5043],{},[2020,4967,4968,4971,4974],{},[2042,4969,4970],{},"Traditional web apps and APIs",[2042,4972,4973],{},"Best suited for simple, monolithic applications",[2042,4975,4976],{},"Not ideal",[2020,4978,4979,4982,4985],{},[2042,4980,4981],{},"Rapid development and deployment",[2042,4983,4984],{},"Excellent choice with easy CI\u002FCD integration",[2042,4986,4987],{},"Suitable, but requires container knowledge",[2020,4989,4990,4993,4996],{},[2042,4991,4992],{},"Minimal infrastructure management",[2042,4994,4995],{},"Ideal, as it abstracts infrastructure complexities",[2042,4997,4998],{},"Provides some abstraction, but requires container management",[2020,5000,5001,5004,5007],{},[2042,5002,5003],{},"Applications with predictable traffic",[2042,5005,5006],{},"Handles predictable scaling efficiently",[2042,5008,5009],{},"Handles scaling well, but shines with fluctuating workloads",[2020,5011,5012,5015,5018],{},[2042,5013,5014],{},"Microservices architecture",[2042,5016,5017],{},"Not optimized for microservices",[2042,5019,5020],{},"Perfectly suited for microservices",[2020,5022,5023,5026,5029],{},[2042,5024,5025],{},"Granular performance tuning",[2042,5027,5028],{},"Limited to platform capabilities",[2042,5030,5031],{},"Offers fine-grained control and optimization",[2020,5033,5034,5037,5040],{},[2042,5035,5036],{},"Multi-cloud and portability needs",[2042,5038,5039],{},"Tightly integrated with Azure ecosystem",[2042,5041,5042],{},"Highly portable across different environments",[2020,5044,5045,5048,5051],{},[2042,5046,5047],{},"Event-driven applications",[2042,5049,5050],{},"Can be integrated with event-driven services",[2042,5052,5053],{},"Natively supports event-driven architectures",[1118,5055],{},[24,5057,4677],{"id":4676},[16,5059,5060,5062],{},[19,5061,4725],{}," is best for developers looking for a straightforward way to deploy web apps and APIs without worrying about infrastructure management. It's ideal for traditional web applications that require a quick and easy deployment process.",[16,5064,5065,5067],{},[19,5066,4828],{}," is suited for developers who need more control over their application environment and want to deploy modern, containerized applications with microservices architecture. It offers greater flexibility and is more suitable for complex applications requiring fine-grained scaling and orchestration.",[16,5069,5070],{},"Choosing between the two depends on your application's architecture, your team's expertise with containers, and your need for control versus ease of use. Whether you prioritize the simplicity and integrated services of App Services or the granular control and performance optimization of Container Apps, Azure has a solution to meet your needs.",{"title":1080,"searchDepth":1081,"depth":1081,"links":5072},[5073,5074,5075,5076,5077,5078],{"id":4710,"depth":1084,"text":4711},{"id":4724,"depth":1084,"text":4725},{"id":4827,"depth":1084,"text":4828},{"id":4925,"depth":1084,"text":4926},{"id":4941,"depth":1084,"text":4942},{"id":4676,"depth":1084,"text":4677},"2024-06-12T15:44:03.462Z","When deploying and managing applications on Azure, two prominent options stand out. Azure App Services and Azure Container Apps. Both cater to different use cases and offer distinct features. Here, we'll dive into their differences, benefits, pros, and cons, and examine their performance features.","\u002Farticles\u002Fimages\u002Fappservices_vs_containerapps.png",{},"\u002Farticles\u002Fazure-appservices-containersapps",{"title":4705,"description":5080},"articles\u002Fazure-appservices-containersapps",[5087],"azure","gXbVnG9BGDl9U618t6qtPPrPHpfcxpLl8gKn_ydmDbI",{"id":5090,"title":5091,"author":8,"body":5092,"createdAt":5446,"description":5447,"extension":1101,"img":5448,"meta":5449,"navigation":1104,"path":5450,"seo":5451,"stem":5452,"tags":5453,"updatedAt":5446,"__hash__":5456},"articles\u002Farticles\u002F2023_BrowserAudioOptions.md","Comparing SpeechRecognition and MediaRecorder APIs in Web Browsers",{"type":10,"value":5093,"toc":5440},[5094,5098,5108,5111,5115,5118,5123,5127,5138,5142,5145,5149,5152,5156,5162,5212,5216,5219,5223,5226,5231,5234,5245,5248,5251,5254,5257,5260,5266,5415,5418,5421,5423,5437],[24,5095,5097],{"id":5096},"introduction","Introduction",[16,5099,5100,5101,1158,5104,5107],{},"When it comes to audio processing in web applications, two key APIs come to mind: ",[2239,5102,5103],{},"SpeechRecognition",[2239,5105,5106],{},"MediaRecorder",". While both deal with audio, they serve distinct purposes and are employed in different scenarios. In this post, we'll explore the differences between these two APIs and discuss their use cases, browser support, implementation details, and more.",[156,5109],{"style":1145,"src":5110,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fspeechrecognition_1.png",[24,5112,5114],{"id":5113},"speechrecognition-api","SpeechRecognition API",[1150,5116,4005],{"id":5117},"purpose",[16,5119,1959,5120,5122],{},[2239,5121,5103],{}," API is designed for real-time speech-to-text conversion, making it ideal for applications that require instantaneous transcription of spoken language.",[1150,5124,5126],{"id":5125},"use-cases","Use Cases",[48,5128,5129,5132,5135],{},[51,5130,5131],{},"Voice-controlled applications",[51,5133,5134],{},"Transcription services",[51,5136,5137],{},"Voice commands in applications",[1150,5139,5141],{"id":5140},"browser-support","Browser Support",[16,5143,5144],{},"Supported in modern browsers, including Chrome and Firefox, though support might vary.",[1150,5146,5148],{"id":5147},"output","Output",[16,5150,5151],{},"Transcribed text based on recognized speech, with events and callbacks for handling recognition results.",[1150,5153,5155],{"id":5154},"implementation","Implementation",[16,5157,5158,5159,5161],{},"Setting up an instance of ",[2239,5160,5103],{},", attaching event listeners, and starting\u002Fstopping the recognition process.",[2232,5163,5167],{"className":5164,"code":5165,"language":5166,"meta":1080,"style":1080},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F Example SpeechRecognition implementation\nconst recognition = new SpeechRecognition();\n\nrecognition.onresult = (event) => {\n  const transcript = event.results[0][0].transcript;\n  console.log('Transcription:', transcript);\n};\n\nrecognition.start();\n","javascript",[2239,5168,5169,5174,5179,5183,5188,5193,5198,5203,5207],{"__ignoreMap":1080},[4215,5170,5171],{"class":4217,"line":4218},[4215,5172,5173],{},"\u002F\u002F Example SpeechRecognition implementation\n",[4215,5175,5176],{"class":4217,"line":1081},[4215,5177,5178],{},"const recognition = new SpeechRecognition();\n",[4215,5180,5181],{"class":4217,"line":1084},[4215,5182,4231],{"emptyLinePlaceholder":1104},[4215,5184,5185],{"class":4217,"line":4234},[4215,5186,5187],{},"recognition.onresult = (event) => {\n",[4215,5189,5190],{"class":4217,"line":4240},[4215,5191,5192],{},"  const transcript = event.results[0][0].transcript;\n",[4215,5194,5195],{"class":4217,"line":4246},[4215,5196,5197],{},"  console.log('Transcription:', transcript);\n",[4215,5199,5200],{"class":4217,"line":4252},[4215,5201,5202],{},"};\n",[4215,5204,5205],{"class":4217,"line":4258},[4215,5206,4231],{"emptyLinePlaceholder":1104},[4215,5208,5209],{"class":4217,"line":4264},[4215,5210,5211],{},"recognition.start();\n",[1150,5213,5215],{"id":5214},"real-time-vs-offline-processing","Real-time vs. Offline Processing",[16,5217,5218],{},"Suited for real-time processing as it transcribes speech as it occurs.",[24,5220,5222],{"id":5221},"mediarecorder-api","MediaRecorder API",[1150,5224,4005],{"id":5225},"purpose-1",[16,5227,1959,5228,5230],{},[2239,5229,5106],{}," API is focused on recording audio and video streams, making it suitable for scenarios where capturing raw audio data for later use is required.",[1150,5232,5126],{"id":5233},"use-cases-1",[48,5235,5236,5239,5242],{},[51,5237,5238],{},"Audio recording applications",[51,5240,5241],{},"Voicemail services",[51,5243,5244],{},"Any scenario requiring capture and storage of audio data",[1150,5246,5141],{"id":5247},"browser-support-1",[16,5249,5250],{},"Widely supported in modern browsers, including Chrome, Firefox, Safari, and Edge.",[1150,5252,5148],{"id":5253},"output-1",[16,5255,5256],{},"Audio (and video) data saved as a media file, often in compressed formats like WebM or MP3.",[1150,5258,5155],{"id":5259},"implementation-1",[16,5261,5262,5263,5265],{},"Setting up a ",[2239,5264,5106],{}," instance, defining the media type and format, specifying the source, and handling recording events.",[2232,5267,5269],{"className":5164,"code":5268,"language":5166,"meta":1080,"style":1080},"\u002F\u002F Example MediaRecorder implementation\nconst getUserMedia = navigator.mediaDevices.getUserMedia;\n\ngetUserMedia({ audio: true })\n.then((stream) => {\nconst mediaRecorder = new MediaRecorder(stream);\nconst chunks = [];\n\n    mediaRecorder.ondataavailable = (event) => {\n      if (event.data.size > 0) {\n        chunks.push(event.data);\n      }\n    };\n\n    mediaRecorder.onstop = () => {\n      const audioBlob = new Blob(chunks, { type: 'audio\u002Fwav' });\n      const audioUrl = URL.createObjectURL(audioBlob);\n      console.log('Audio URL:', audioUrl);\n    };\n\n    mediaRecorder.start();\n\n    \u002F\u002F Stop recording after 5000 milliseconds (5 seconds)\n    setTimeout(() => {\n      mediaRecorder.stop();\n    }, 5000);\n})\n.catch((error) => {\nconsole.error('Error accessing microphone:', error);\n});\n",[2239,5270,5271,5276,5281,5285,5290,5295,5300,5305,5309,5314,5319,5324,5329,5334,5338,5343,5348,5353,5358,5362,5366,5371,5375,5380,5385,5390,5395,5400,5405,5410],{"__ignoreMap":1080},[4215,5272,5273],{"class":4217,"line":4218},[4215,5274,5275],{},"\u002F\u002F Example MediaRecorder implementation\n",[4215,5277,5278],{"class":4217,"line":1081},[4215,5279,5280],{},"const getUserMedia = navigator.mediaDevices.getUserMedia;\n",[4215,5282,5283],{"class":4217,"line":1084},[4215,5284,4231],{"emptyLinePlaceholder":1104},[4215,5286,5287],{"class":4217,"line":4234},[4215,5288,5289],{},"getUserMedia({ audio: true })\n",[4215,5291,5292],{"class":4217,"line":4240},[4215,5293,5294],{},".then((stream) => {\n",[4215,5296,5297],{"class":4217,"line":4246},[4215,5298,5299],{},"const mediaRecorder = new MediaRecorder(stream);\n",[4215,5301,5302],{"class":4217,"line":4252},[4215,5303,5304],{},"const chunks = [];\n",[4215,5306,5307],{"class":4217,"line":4258},[4215,5308,4231],{"emptyLinePlaceholder":1104},[4215,5310,5311],{"class":4217,"line":4264},[4215,5312,5313],{},"    mediaRecorder.ondataavailable = (event) => {\n",[4215,5315,5316],{"class":4217,"line":4270},[4215,5317,5318],{},"      if (event.data.size > 0) {\n",[4215,5320,5321],{"class":4217,"line":4276},[4215,5322,5323],{},"        chunks.push(event.data);\n",[4215,5325,5326],{"class":4217,"line":4282},[4215,5327,5328],{},"      }\n",[4215,5330,5331],{"class":4217,"line":4288},[4215,5332,5333],{},"    };\n",[4215,5335,5336],{"class":4217,"line":4294},[4215,5337,4231],{"emptyLinePlaceholder":1104},[4215,5339,5340],{"class":4217,"line":4300},[4215,5341,5342],{},"    mediaRecorder.onstop = () => {\n",[4215,5344,5345],{"class":4217,"line":4306},[4215,5346,5347],{},"      const audioBlob = new Blob(chunks, { type: 'audio\u002Fwav' });\n",[4215,5349,5350],{"class":4217,"line":4312},[4215,5351,5352],{},"      const audioUrl = URL.createObjectURL(audioBlob);\n",[4215,5354,5355],{"class":4217,"line":4318},[4215,5356,5357],{},"      console.log('Audio URL:', audioUrl);\n",[4215,5359,5360],{"class":4217,"line":4324},[4215,5361,5333],{},[4215,5363,5364],{"class":4217,"line":4330},[4215,5365,4231],{"emptyLinePlaceholder":1104},[4215,5367,5368],{"class":4217,"line":4336},[4215,5369,5370],{},"    mediaRecorder.start();\n",[4215,5372,5373],{"class":4217,"line":4342},[4215,5374,4231],{"emptyLinePlaceholder":1104},[4215,5376,5377],{"class":4217,"line":4348},[4215,5378,5379],{},"    \u002F\u002F Stop recording after 5000 milliseconds (5 seconds)\n",[4215,5381,5382],{"class":4217,"line":4353},[4215,5383,5384],{},"    setTimeout(() => {\n",[4215,5386,5387],{"class":4217,"line":4359},[4215,5388,5389],{},"      mediaRecorder.stop();\n",[4215,5391,5392],{"class":4217,"line":4365},[4215,5393,5394],{},"    }, 5000);\n",[4215,5396,5397],{"class":4217,"line":4371},[4215,5398,5399],{},"})\n",[4215,5401,5402],{"class":4217,"line":4377},[4215,5403,5404],{},".catch((error) => {\n",[4215,5406,5407],{"class":4217,"line":4383},[4215,5408,5409],{},"console.error('Error accessing microphone:', error);\n",[4215,5411,5412],{"class":4217,"line":4389},[4215,5413,5414],{},"});\n",[1150,5416,5215],{"id":5417},"real-time-vs-offline-processing-1",[16,5419,5420],{},"Can be used for both real-time recording and offline processing, as recorded data can be saved and processed later.",[24,5422,4677],{"id":4676},[16,5424,5425,5426,1158,5428,5430,5431,5433,5434,5436],{},"In conclusion, the choice between ",[2239,5427,5103],{},[2239,5429,5106],{}," depends on the specific requirements of your application. If real-time speech-to-text conversion is crucial, the ",[2239,5432,5103],{}," API is the go-to option. On the other hand, if you need to capture and store audio for playback or further processing, the ",[2239,5435,5106],{}," API is more suitable. Ensure to consider browser support and potential fallbacks based on your application's needs.",[4682,5438,5439],{},"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":1080,"searchDepth":1081,"depth":1081,"links":5441},[5442,5443,5444,5445],{"id":5096,"depth":1084,"text":5097},{"id":5113,"depth":1084,"text":5114},{"id":5221,"depth":1084,"text":5222},{"id":4676,"depth":1084,"text":4677},"2023-12-02","Explore the distinctions between the SpeechRecognition and MediaRecorder APIs in web browsers with our latest blog post. Discover their unique purposes, use cases, and implementation details. Whether you're interested in real-time speech-to-text conversion or capturing and storing audio data, this comparison will guide you in choosing the right API for your web application. Dive into the world of audio processing and make informed decisions based on browser support, output formats, and more.","\u002Farticles\u002Fimages\u002Fspeechrecognition_2.png",{},"\u002Farticles\u002F2023_browseraudiooptions",{"title":5091,"description":5447},"articles\u002F2023_BrowserAudioOptions",[5454,5455],"chrome","web","gpob4_4BcdcvaPduD0f1E6PeB04iS3OJ2TTnmFKFxB0",{"id":5458,"title":5459,"author":8,"body":5460,"createdAt":5652,"description":5653,"extension":1101,"img":5654,"meta":5655,"navigation":1104,"path":5656,"seo":5657,"stem":5658,"tags":5659,"updatedAt":5652,"__hash__":5662},"articles\u002Farticles\u002Fgit_resolve_conflicts_vscode.md","Resolve Git Conflicts with Visual Studio Code",{"type":10,"value":5461,"toc":5644},[5462,5466,5473,5477,5487,5490,5498,5502,5505,5509,5515,5519,5522,5554,5558,5561,5572,5575,5579,5582,5586,5589,5593,5599,5603,5606,5632,5636,5642],[1948,5463,5465],{"id":5464},"how-to-resolve-git-conflicts-with-visual-studio-code","How to Resolve Git Conflicts with Visual Studio Code",[16,5467,5468,5469,5472],{},"Git is a powerful version control system that helps developers collaborate on projects seamlessly. However, in the world of collaborative coding, conflicts can arise when different team members make changes to the same file simultaneously. When you pull changes from a remote repository using ",[2239,5470,5471],{},"git pull"," and encounter conflicts, it's important to know how to resolve them effectively. In this article, we'll explore how to resolve Git conflicts using Visual Studio Code.",[24,5474,5476],{"id":5475},"understanding-git-conflicts","Understanding Git Conflicts",[16,5478,5479,5480,5482,5483,5486],{},"Before diving into conflict resolution, it's essential to understand what Git conflicts are. When you pull changes from a remote repository using ",[2239,5481,5471],{},", Git attempts to automatically merge those changes into your local branch. However, conflicts occur when Git can't reconcile the differences between your local branch (also known as ",[2239,5484,5485],{},"HEAD",") and the incoming remote changes.",[16,5488,5489],{},"Conflicts typically arise when:",[48,5491,5492,5495],{},[51,5493,5494],{},"You've modified the same part of a file that has been changed in the remote repository.",[51,5496,5497],{},"The remote changes are incompatible with your local changes.",[24,5499,5501],{"id":5500},"using-visual-studio-code-for-conflict-resolution","Using Visual Studio Code for Conflict Resolution",[16,5503,5504],{},"Visual Studio Code (VS Code) provides a user-friendly interface for resolving Git conflicts. Here's a step-by-step guide on how to do it:",[1150,5506,5508],{"id":5507},"step-1-identify-the-conflicts","Step 1: Identify the Conflicts",[16,5510,5511,5512,5514],{},"When you run ",[2239,5513,5471],{}," and conflicts occur, VS Code will immediately bring these conflicts to your attention. You'll see the affected files with conflict markers.",[1150,5516,5518],{"id":5517},"step-2-open-the-conflicted-file","Step 2: Open the Conflicted File",[16,5520,5521],{},"To resolve conflicts, open the conflicted file(s) in VS Code. You'll notice that the conflicting sections are marked with special conflict markers:",[2232,5523,5527],{"className":5524,"code":5525,"language":5526,"meta":1080,"style":1080},"language-plaintext shiki shiki-themes github-light github-dark","\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n\u002F\u002F Your local changes\n=======\n\u002F\u002F Incoming changes from the remote repository\n>>>>>>> remote\u002Fbranch-name\n","plaintext",[2239,5528,5529,5534,5539,5544,5549],{"__ignoreMap":1080},[4215,5530,5531],{"class":4217,"line":4218},[4215,5532,5533],{},"\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n",[4215,5535,5536],{"class":4217,"line":1081},[4215,5537,5538],{},"\u002F\u002F Your local changes\n",[4215,5540,5541],{"class":4217,"line":1084},[4215,5542,5543],{},"=======\n",[4215,5545,5546],{"class":4217,"line":4234},[4215,5547,5548],{},"\u002F\u002F Incoming changes from the remote repository\n",[4215,5550,5551],{"class":4217,"line":4240},[4215,5552,5553],{},">>>>>>> remote\u002Fbranch-name\n",[1150,5555,5557],{"id":5556},"step-3-review-and-merge","Step 3: Review and Merge",[16,5559,5560],{},"Carefully review the conflicting changes. You have the freedom to choose which changes to keep and which to discard. Here are your options:",[48,5562,5563,5566,5569],{},[51,5564,5565],{},"Keep your local changes and discard the remote changes.",[51,5567,5568],{},"Keep the remote changes and discard your local changes.",[51,5570,5571],{},"Combine both sets of changes to create a new merged version.",[16,5573,5574],{},"Edit the file to remove the conflict markers and craft the code according to your chosen merge strategy. This step might require some manual coding, so be sure to pay close attention to the code.",[1150,5576,5578],{"id":5577},"step-4-save-the-file","Step 4: Save the File",[16,5580,5581],{},"After you've successfully resolved the conflicts, save the file.",[1150,5583,5585],{"id":5584},"step-5-stage-and-commit","Step 5: Stage and Commit",[16,5587,5588],{},"Use the source control interface in VS Code to stage the resolved changes. Once you've staged all the resolved files, commit the changes. Be sure to add a meaningful commit message describing the conflict resolution.",[1150,5590,5592],{"id":5591},"step-6-complete-the-pull","Step 6: Complete the Pull",[16,5594,5595,5596,5598],{},"Now that you've resolved the conflicts and committed your changes, you can finish the ",[2239,5597,5471],{}," operation. Git will update your local branch with the latest changes from the remote repository.",[24,5600,5602],{"id":5601},"further-resources","Further Resources",[16,5604,5605],{},"To deepen your understanding of Git conflicts and conflict resolution, consider exploring these online resources:",[2652,5607,5608,5616,5624],{},[51,5609,5610,5615],{},[1139,5611,5614],{"href":5612,"rel":5613},"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-mergetool",[3695],"Git Documentation on Resolving Merge Conflicts",": The official Git documentation provides detailed information on resolving merge conflicts using various tools.",[51,5617,5618,5623],{},[1139,5619,5622],{"href":5620,"rel":5621},"https:\u002F\u002Fwww.atlassian.com\u002Fgit",[3695],"Atlassian Git Tutorials",": Atlassian offers a comprehensive set of Git tutorials, including guides on conflict resolution.",[51,5625,5626,5631],{},[1139,5627,5630],{"href":5628,"rel":5629},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fgithub\u002Fcollaborating-with-issues-and-pull-requests\u002Fresolving-a-merge-conflict-on-github",[3695],"GitHub's Guide to Resolving Merge Conflicts",": GitHub provides a step-by-step guide to resolving merge conflicts directly on the platform.",[24,5633,5635],{"id":5634},"wrapping-up","Wrapping Up",[16,5637,5638,5639,5641],{},"Resolving Git conflicts is a crucial skill for any developer working in a collaborative environment. When conflicts arise during a ",[2239,5640,5471],{},", Visual Studio Code provides a user-friendly way to handle them. By following the steps outlined in this article and exploring the recommended resources, you can efficiently resolve conflicts and keep your codebase in sync with your team's work.",[4682,5643,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":5645},[5646],{"id":5464,"depth":1081,"text":5465,"children":5647},[5648,5649,5650,5651],{"id":5475,"depth":1084,"text":5476},{"id":5500,"depth":1084,"text":5501},{"id":5601,"depth":1084,"text":5602},{"id":5634,"depth":1084,"text":5635},"2023-09-01","Git is a powerful version control system that helps developers collaborate on projects seamlessly. However, in the world of collaborative coding, conflicts can arise when different team members make changes to the same file simultaneously.","\u002Farticles\u002Fimages\u002Fgit.png",{},"\u002Farticles\u002Fgit_resolve_conflicts_vscode",{"title":5459,"description":5653},"articles\u002Fgit_resolve_conflicts_vscode",[5660,5661],"git","sourcecontrol","qGIiwA6p8ljvPGjXB-kBwnv9xalFJigA20nnQQ13C4o",{"id":5664,"title":5665,"author":8,"body":5666,"createdAt":6299,"description":6300,"extension":1101,"img":6301,"meta":6302,"navigation":1104,"path":6303,"seo":6304,"stem":6305,"tags":6306,"updatedAt":6299,"__hash__":6308},"articles\u002Farticles\u002F2023_vscode_extensions.md","Rev Up Your Coding Game with VS Code - The Must-Have Tool for Developers",{"type":10,"value":5667,"toc":6294},[5668,5672,5680,5683,5686,5689,5692,5694,5696,5700,5703,5706,6280,6283,6285,6288,6291],[24,5669,5671],{"id":5670},"vs-code-extensions-for-developers","VS Code Extensions for Developers",[16,5673,5674,5679],{},[1139,5675,5678],{"href":5676,"rel":5677},"https:\u002F\u002Fcode.visualstudio.com\u002F",[3695],"VS Code",", short for Visual Studio Code, is a popular code editor that is widely used by software developers and programmers around the world. It is a free and open-source editor that has gained popularity due to its ease of use, flexibility, and powerful features.",[16,5681,5682],{},"Developed by Microsoft, VS Code is available on Windows, Linux, and macOS. It provides a range of features that make coding and debugging easier, such as syntax highlighting, code completion, code folding, debugging, and Git integration. These features help developers write code faster and more efficiently, and improve the overall quality of their code.",[16,5684,5685],{},"One of the key advantages of VS Code is its support for a wide variety of programming languages. It supports popular languages like JavaScript, Python, C++, and many others, making it a versatile tool for developers who work with different languages.",[16,5687,5688],{},"Moreover, VS Code has a large and active extension marketplace that allows developers to add additional functionality and features to the editor. These extensions can help developers work more efficiently by adding features like linting, testing, and more. This means that developers can customize VS Code to fit their unique needs and workflows.",[156,5690],{"style":1145,"src":5691,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fvscode_1.png",[1118,5693],{},[1118,5695],{},[24,5697,5699],{"id":5698},"some-of-the-best-vs-code-extensions-for-developers","Some of the Best VS Code Extensions for Developers",[16,5701,5702],{},"Best of the best VS Code extensions for developers:",[16,5704,5705],{},"Sure! Here is a list of the requested VS Code extensions along with a brief description, link to the extension page, and the title of the extension:",[2652,5707,5708,5720,5730,5740,5750,5760,5770,5780,5790,5800,5810,5820,5830,5840,5850,5860,5870,5880,5890,5900,5910,5920,5930,5940,5950,5960,5971,5981,5991,6001,6011,6021,6031,6041,6051,6061,6071,6081,6091,6101,6111,6121,6131,6140,6150,6160,6170,6180,6190,6200,6210,6220,6230,6240,6250,6260,6270],{},[51,5709,5710,5713,5714,5719],{},[19,5711,5712],{},"Better Comments"," : (",[1139,5715,5718],{"href":5716,"rel":5717},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=aaron-bond.better-comments",[3695],"Link",") - This extension provides a variety of ways to highlight and categorize your code comments to make them more visually distinct and informative.",[51,5721,5722,5713,5725,5729],{},[19,5723,5724],{},"Project Manager",[1139,5726,5718],{"href":5727,"rel":5728},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=alefragnani.project-manager",[3695],") - This extension allows you to easily manage and switch between multiple projects within VS Code.",[51,5731,5732,5713,5735,5739],{},[19,5733,5734],{},"Flutter Snippets",[1139,5736,5718],{"href":5737,"rel":5738},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=alexisvt.flutter-snippets",[3695],") - This extension provides a collection of snippets for Flutter development to help speed up your coding process.",[51,5741,5742,5713,5745,5749],{},[19,5743,5744],{},"Export",[1139,5746,5718],{"href":5747,"rel":5748},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=aslamanver.vsc-export",[3695],") - This extension allows you to export your VS Code settings, keybindings, and extensions to easily transfer them to another machine.",[51,5751,5752,5713,5755,5759],{},[19,5753,5754],{},"Theme Hop Light",[1139,5756,5718],{"href":5757,"rel":5758},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=bubersson.theme-hop-light",[3695],") - This extension provides a light theme for VS Code with soft colors that are easy on the eyes.",[51,5761,5762,5713,5765,5769],{},[19,5763,5764],{},"Path Intellisense",[1139,5766,5718],{"href":5767,"rel":5768},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=christian-kohler.path-intellisense",[3695],") - This extension provides autocompletion for file paths when you are typing them in your code.",[51,5771,5772,5713,5775,5779],{},[19,5773,5774],{},"DS Code GPT",[1139,5776,5718],{"href":5777,"rel":5778},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=DanielSanMedium.dscodegpt",[3695],") - This extension provides a GPT-3 based autocompletion service for coding in various languages.",[51,5781,5782,5713,5785,5789],{},[19,5783,5784],{},"Vue Peek",[1139,5786,5718],{"href":5787,"rel":5788},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=dariofuzinato.vue-peek",[3695],") - This extension allows you to easily jump to the definition of Vue components and their templates.",[51,5791,5792,5713,5795,5799],{},[19,5793,5794],{},"Dark Theme for Flutter Dev",[1139,5796,5718],{"href":5797,"rel":5798},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=DarkThemeforFlutterDev.dark",[3695],") - This extension provides a dark theme for Flutter development with vibrant colors.",[51,5801,5802,5713,5805,5809],{},[19,5803,5804],{},"Dart Code",[1139,5806,5718],{"href":5807,"rel":5808},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=Dart-Code.dart-code",[3695],") - This extension provides language support and tools for Dart development.",[51,5811,5812,5713,5815,5819],{},[19,5813,5814],{},"Flutter",[1139,5816,5718],{"href":5817,"rel":5818},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=Dart-Code.flutter",[3695],") - This extension provides additional tools and support for Flutter development on top of the Dart Code extension.",[51,5821,5822,5713,5825,5829],{},[19,5823,5824],{},"Markdownlint",[1139,5826,5718],{"href":5827,"rel":5828},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=DavidAnson.vscode-markdownlint",[3695],") - This extension provides linting for Markdown files to ensure that they follow best practices.",[51,5831,5832,5713,5835,5839],{},[19,5833,5834],{},"ESLint",[1139,5836,5718],{"href":5837,"rel":5838},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=dbaeumer.vscode-eslint",[3695],") - This extension provides linting for JavaScript and TypeScript files using ESLint.",[51,5841,5842,5713,5845,5849],{},[19,5843,5844],{},"XML",[1139,5846,5718],{"href":5847,"rel":5848},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=DotJoshJohnson.xml",[3695],") - This extension provides language support and tools",[51,5851,5852,5713,5855,5859],{},[19,5853,5854],{},"auto-rename-tag",[1139,5856,5718],{"href":5857,"rel":5858},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=formulahendry.auto-rename-tag",[3695],") This extension is helpful when working with HTML or XML files in VS Code. It automatically renames a tag whenever you change one of its opening or closing tags, ensuring that your code stays syntactically correct.",[51,5861,5862,5713,5865,5869],{},[19,5863,5864],{},"GitHub Copilot",[1139,5866,5718],{"href":5867,"rel":5868},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=GitHub.copilot",[3695],") GitHub Copilot is an AI-powered code completion tool that provides suggestions as you type. It is based on OpenAI's GPT model and can generate code snippets based on the context of your code. This extension is designed to help developers increase their productivity and save time when writing code.",[51,5871,5872,5713,5875,5879],{},[19,5873,5874],{},"GitHub Copilot Nightly",[1139,5876,5718],{"href":5877,"rel":5878},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=GitHub.copilot-nightly",[3695],") This extension is the nightly build of GitHub Copilot, which means that it contains the latest features and updates that have not yet been released to the stable version.",[51,5881,5882,5713,5885,5889],{},[19,5883,5884],{},"GitHub RemoteHub",[1139,5886,5718],{"href":5887,"rel":5888},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=GitHub.remotehub",[3695],") GitHub RemoteHub is an extension that enables you to connect to your GitHub repositories directly from VS Code. You can use it to clone, pull, push, and view changes in your repositories without leaving the editor.",[51,5891,5892,5713,5895,5899],{},[19,5893,5894],{},"GitHub Pull Requests",[1139,5896,5718],{"href":5897,"rel":5898},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=GitHub.vscode-pull-request-github",[3695],") This extension allows you to review and manage pull requests from within VS Code. You can view diffs, add comments, and merge pull requests without switching to a browser.",[51,5901,5902,5713,5905,5909],{},[19,5903,5904],{},"JSON to Dart",[1139,5906,5718],{"href":5907,"rel":5908},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=hirantha.json-to-dart",[3695],") JSON to Dart is an extension that converts JSON strings to Dart classes automatically. It saves time and effort when working with Dart and Flutter projects that rely heavily on JSON serialization.",[51,5911,5912,5713,5915,5919],{},[19,5913,5914],{},"Auto Open Markdown Preview",[1139,5916,5718],{"href":5917,"rel":5918},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=hnw.vscode-auto-open-markdown-preview",[3695],") This extension automatically opens a live preview of your Markdown files whenever you open them. You can customize the preview layout and choose to open it in a split editor or a separate window.",[51,5921,5922,5713,5925,5929],{},[19,5923,5924],{},"Vue Snippets",[1139,5926,5718],{"href":5927,"rel":5928},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=hollowtree.vue-snippets",[3695],") Vue Snippets is an extension that provides a collection of useful code snippets for Vue.js development. It includes snippets for components, directives, lifecycle hooks, and more.",[51,5931,5932,5713,5935,5939],{},[19,5933,5934],{},"Output Colorizer",[1139,5936,5718],{"href":5937,"rel":5938},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=IBM.output-colorizer",[3695],") Output Colorizer is an extension that adds color to the output panel in VS Code. It helps you to distinguish between different types of output, such as errors, warnings, and information messages.",[51,5941,5942,5713,5945,5949],{},[19,5943,5944],{},"Vue Typescript SFC Snippets",[1139,5946,5718],{"href":5947,"rel":5948},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=LissetteIbnz.vscode-vue-typescript-sfc-snippets",[3695],") Vue Typescript SFC Snippets is an extension that provides a collection of code snippets for Vue.js Single-File Components (SFCs) written in TypeScript. It includes snippets for component templates, props, computed properties, and more.",[51,5951,5952,5713,5955,5959],{},[19,5953,5954],{},"Git Graph",[1139,5956,5718],{"href":5957,"rel":5958},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mhutchie.git-graph",[3695],") Git Graph is an extension that visualizes the Git repository history in a graph. It allows you to see branches, commits, and tags, and provides tools for exploring and comparing different versions of your code.",[51,5961,5962,5965,5966,5970],{},[19,5963,5964],{},"mikeburgh.xml-format",": (",[1139,5967,5718],{"href":5968,"rel":5969},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mikeburgh.xml-format",[3695],") This extension adds XML formatting capabilities to Visual Studio Code, allowing developers to easily format their XML files according to their preferences.",[51,5972,5973,5965,5976,5980],{},[19,5974,5975],{},"mohsen1.prettify-json",[1139,5977,5718],{"href":5978,"rel":5979},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mohsen1.prettify-json",[3695],") This extension helps developers to format JSON files in a way that is easier to read and understand. It can also highlight syntax errors and provide suggestions to fix them.",[51,5982,5983,5965,5986,5990],{},[19,5984,5985],{},"mrmlnc.vscode-scss",[1139,5987,5718],{"href":5988,"rel":5989},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mrmlnc.vscode-scss",[3695],") This extension provides SCSS and Sass syntax highlighting, as well as code completion and linting features. It is ideal for developers who work with CSS preprocessors.",[51,5992,5993,5965,5996,6000],{},[19,5994,5995],{},"ms-azuretools.vscode-docker",[1139,5997,5718],{"href":5998,"rel":5999},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-azuretools.vscode-docker",[3695],") This extension is designed for developers who work with Docker containers. It provides a range of features such as Dockerfile editing, container management, and debugging.",[51,6002,6003,5965,6006,6010],{},[19,6004,6005],{},"ms-dotnettools.csharp",[1139,6007,5718],{"href":6008,"rel":6009},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-dotnettools.csharp",[3695],") This extension provides C# language support for Visual Studio Code. It includes features such as IntelliSense, debugging, and code navigation.",[51,6012,6013,5965,6016,6020],{},[19,6014,6015],{},"ms-mssql.data-workspace-vscode",[1139,6017,5718],{"href":6018,"rel":6019},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-mssql.data-workspace-vscode",[3695],") This extension provides tools for working with SQL databases in Visual Studio Code. It includes features such as IntelliSense, query editing, and database management.",[51,6022,6023,5965,6026,6030],{},[19,6024,6025],{},"ms-mssql.mssql",[1139,6027,5718],{"href":6028,"rel":6029},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-mssql.mssql",[3695],") This extension provides SQL Server tools for Visual Studio Code, including IntelliSense, query editing, and database management.",[51,6032,6033,5965,6036,6040],{},[19,6034,6035],{},"ms-mssql.sql-bindings-vscode",[1139,6037,5718],{"href":6038,"rel":6039},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-mssql.sql-bindings-vscode",[3695],") This extension provides tools for working with SQL Server bindings in Visual Studio Code. It includes features such as IntelliSense, query editing, and database management.",[51,6042,6043,5965,6046,6050],{},[19,6044,6045],{},"ms-mssql.sql-database-projects-vscode",[1139,6047,5718],{"href":6048,"rel":6049},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-mssql.sql-database-projects-vscode",[3695],") This extension provides tools for working with SQL Server database projects in Visual Studio Code. It includes features such as IntelliSense, query editing, and database management.",[51,6052,6053,5965,6056,6060],{},[19,6054,6055],{},"ms-vscode-remote.remote-containers",[1139,6057,5718],{"href":6058,"rel":6059},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode-remote.remote-containers",[3695],") This extension allows developers to develop in a container-based environment, directly within Visual Studio Code. It is ideal for developers who need to work with multiple development environments.",[51,6062,6063,5965,6066,6070],{},[19,6064,6065],{},"ms-vscode.azure-account",[1139,6067,5718],{"href":6068,"rel":6069},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode.azure-account",[3695],") This extension provides Azure account management capabilities within Visual Studio Code. It allows developers to manage their Azure resources and services directly from the editor.",[51,6072,6073,5965,6076,6080],{},[19,6074,6075],{},"ms-vscode.azure-repos",[1139,6077,5718],{"href":6078,"rel":6079},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode.azure-repos",[3695],") This extension provides tools for working with Azure Repos within Visual Studio Code. It includes features such as source control management, code reviews, and pull requests.",[51,6082,6083,5965,6086,6090],{},[19,6084,6085],{},"ms-vscode.powershell",[1139,6087,5718],{"href":6088,"rel":6089},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode.Power",[3695],") Powershell  extension",[51,6092,6093,5965,6096,6100],{},[19,6094,6095],{},"Remote Repositories",[1139,6097,5718],{"href":6098,"rel":6099},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=ms-vscode.remote-repositories",[3695],") This extension provides a way to clone, search and open repositories from remote sources directly in VS Code. With this extension, you can easily clone repositories from services like GitHub, GitLab, Bitbucket, and Azure DevOps without having to leave the editor.",[51,6102,6103,5965,6106,6110],{},[19,6104,6105],{},"Jest",[1139,6107,5718],{"href":6108,"rel":6109},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=Orta.vscode-jest",[3695],") Jest is a popular testing framework for JavaScript applications. This extension provides VS Code integration for Jest, allowing you to run and debug your Jest tests directly from the editor. It also provides syntax highlighting for Jest test files and includes various snippets to speed up test writing.",[51,6112,6113,5713,6116,6120],{},[19,6114,6115],{},"VueHelper",[1139,6117,5718],{"href":6118,"rel":6119},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=oysun.vuehelper",[3695],") VueHelper is a collection of snippets and tools to improve the development experience for Vue.js applications in VS Code. It includes snippets for common Vue.js code patterns, as well as commands to generate Vue.js components and templates.",[51,6122,6123,5713,6126,6130],{},[19,6124,6125],{},"Material Icon Theme",[1139,6127,5718],{"href":6128,"rel":6129},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=PKief.material-icon-theme",[3695],") Material Icon Theme is a popular icon set for VS Code. It replaces the default file icons with colorful icons that help you quickly identify different file types in your project. It supports a wide range of file types and is highly customizable.",[51,6132,6133,5965,6135,6139],{},[19,6134,5844],{},[1139,6136,5718],{"href":6137,"rel":6138},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=redhat.vscode-xml",[3695],") XML is a language used for representing data in a structured way. This extension provides syntax highlighting and code completion for XML files in VS Code. It also includes various features for navigating and editing XML files.",[51,6141,6142,5713,6145,6149],{},[19,6143,6144],{},"Flutter Riverpod Snippets",[1139,6146,5718],{"href":6147,"rel":6148},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=robert-brunhage.flutter-riverpod-snippets",[3695],") Riverpod is a state management library for Flutter applications. This extension provides snippets for Riverpod code patterns, allowing you to quickly create Riverpod providers and consumers in your Flutter code.",[51,6151,6152,5713,6155,6159],{},[19,6153,6154],{},"Markdown Preview Enhanced",[1139,6156,5718],{"href":6157,"rel":6158},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=shd101wyy.markdown-preview-enhanced",[3695],") Markdown Preview Enhanced is a powerful extension for working with Markdown files in VS Code. It provides a live preview of Markdown files, allowing you to see how your Markdown will look as you write it. It also includes features for exporting your Markdown to various formats, including PDF and HTML.",[51,6161,6162,5713,6165,6169],{},[19,6163,6164],{},"Code Spell Checker",[1139,6166,5718],{"href":6167,"rel":6168},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=streetsidesoftware.code-spell-checker",[3695],") Code Spell Checker is an extension that checks the spelling of your code as you write it in VS Code. It supports a wide range of programming languages and file types and includes customizable settings for controlling which files and directories to scan.",[51,6171,6172,5713,6175,6179],{},[19,6173,6174],{},"Duplicate Finder",[1139,6176,5718],{"href":6177,"rel":6178},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=tlevesque2.duplicate-finder",[3695],") Duplicate Finder is an extension that helps you find and remove duplicate code in your project. It analyzes your code and identifies sections that are repeated in multiple places. It then provides suggestions for how to refactor your code to eliminate the duplication.",[51,6181,6182,5713,6185,6189],{},[19,6183,6184],{},"Vue Language Server",[1139,6186,5718],{"href":6187,"rel":6188},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vaniship.vue-ls",[3695],") Vue Language Server is an extension that provides code completion, diagnostics, and other features for Vue.js applications in VS Code. It relies on the Vue.js Language Server to provide these features, which is built on top of the TypeScript Language Server.",[51,6191,6192,5965,6195,6199],{},[19,6193,6194],{},"vinicioslc.adb-interface-vscode",[1139,6196,5718],{"href":6197,"rel":6198},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vinicioslc.adb-interface-vscode",[3695],") A Visual Studio Code extension that provides an interface for interacting with Android Debug Bridge (ADB) devices directly from the editor.",[51,6201,6202,5965,6205,6209],{},[19,6203,6204],{},"VisualStudioExptTeam.intellicode-api-usage-examples",[1139,6206,5718],{"href":6207,"rel":6208},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VisualStudioExptTeam.intellicode-api-usage-examples",[3695],") This extension provides examples of how to use the IntelliCode API in Visual Studio Code.",[51,6211,6212,5965,6215,6219],{},[19,6213,6214],{},"VisualStudioExptTeam.vscodeintellicode",[1139,6216,5718],{"href":6217,"rel":6218},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VisualStudioExptTeam.vscodeintellicode",[3695],") An extension that provides AI-assisted development features, such as autocompletion and code recommendations, powered by machine learning through the IntelliCode technology.",[51,6221,6222,5965,6225,6229],{},[19,6223,6224],{},"vscjava.vscode-gradle",[1139,6226,5718],{"href":6227,"rel":6228},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vscjava.vscode-gradle",[3695],") This extension provides support for the Gradle build system in Visual Studio Code, allowing users to run and debug Gradle tasks directly from the editor.",[51,6231,6232,5965,6235,6239],{},[19,6233,6234],{},"vscode-icons-team.vscode-icons",[1139,6236,5718],{"href":6237,"rel":6238},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vscode-icons-team.vscode-icons",[3695],") A popular extension that provides icons for files and folders in Visual Studio Code, making it easier to visually distinguish between different types of files.",[51,6241,6242,5965,6245,6249],{},[19,6243,6244],{},"Vue.volar",[1139,6246,5718],{"href":6247,"rel":6248},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=Vue.volar",[3695],") An extension that provides support for the Volar language server for Vue.js in Visual Studio Code, offering enhanced features such as improved autocompletion and diagnostics.",[51,6251,6252,5965,6255,6259],{},[19,6253,6254],{},"vuetifyjs.vuetify-vscode",[1139,6256,5718],{"href":6257,"rel":6258},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vuetifyjs.vuetify-vscode",[3695],") An extension that provides support for the Vuetify framework in Visual Studio Code, offering features such as code snippets and autocompletion for Vuetify components.",[51,6261,6262,5965,6265,6269],{},[19,6263,6264],{},"wesbos.theme-cobalt2",[1139,6266,5718],{"href":6267,"rel":6268},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=wesbos.theme-cobalt2",[3695],") A popular dark theme for Visual Studio Code, offering an attractive and easy-to-read color scheme for code editing.",[51,6271,6272,5965,6275,6279],{},[19,6273,6274],{},"willjleong.nuxt-typescript-snippets",[1139,6276,5718],{"href":6277,"rel":6278},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=willjleong.nuxt-typescript-snippets",[3695],") An extension that provides code snippets for working with Nuxt.js and TypeScript in Visual Studio Code, allowing developers to quickly insert common code patterns.",[16,6281,6282],{},"This was a list of all the extensions that I currently have installed on my VS Code. I hope you found this list useful and that you will find some of these extensions useful for your own projects.",[24,6284,4677],{"id":4676},[16,6286,6287],{},"With the increasing demand for efficient software development tools and the growing popularity of cloud-based development, VS Code is well-positioned to continue its upward trajectory. As more developers move towards remote work, VS Code's ability to integrate with cloud-based development platforms and its support for remote development workflows will be critical to its continued success.",[16,6289,6290],{},"Additionally, the emergence of artificial intelligence and machine learning has the potential to further enhance the capabilities of VS Code, such as with the recent introduction of GitHub Copilot, an AI-powered coding assistant that suggests code as you type.",[16,6292,6293],{},"Overall, the potential for VS Code is significant, and it is likely to continue to be a popular and valuable tool for developers for years to come.",{"title":1080,"searchDepth":1081,"depth":1081,"links":6295},[6296,6297,6298],{"id":5670,"depth":1084,"text":5671},{"id":5698,"depth":1084,"text":5699},{"id":4676,"depth":1084,"text":4677},"2023-04-23","VS Code is a free and open-source code editor developed by Microsoft for Windows, Linux, and macOS. It is a popular tool among software developers due to its ease of use, powerful features, and flexibility. VS Code provides a range of features such as syntax highlighting, code completion, debugging, and Git integration, making coding and debugging easier for developers.","\u002Farticles\u002Fimages\u002Fvscode.png",{},"\u002Farticles\u002F2023_vscode_extensions",{"title":5665,"description":6300},"articles\u002F2023_vscode_extensions",[6307,4701],"vscode","Hgh5GVn_QUiZ0cGVL38s4262URFvdFn1drgYnRMzh_w",{"id":6310,"title":6311,"author":8,"body":6312,"createdAt":6413,"description":6414,"extension":1101,"img":6415,"meta":6416,"navigation":1104,"path":6417,"seo":6418,"stem":6419,"tags":6420,"updatedAt":6413,"__hash__":6421},"articles\u002Farticles\u002Fflow_state_developer.md","How to Avoid Distractions and Get into the Flow State as a Developer",{"type":10,"value":6313,"toc":6407},[6314,6318,6321,6325,6328,6342,6345,6348,6350,6352,6356,6359,6389,6392,6395,6398,6400],[24,6315,6317],{"id":6316},"importance-of-uninterrupted-time","Importance of uninterrupted time",[16,6319,6320],{},"As a developer, you know how important it is to have uninterrupted time to focus on your tasks and projects. However, in today's fast-paced and collaborative work environment, it can be hard to find 'focus' time within an organization. You may be constantly bombarded with messages, emails, meetings, and other distractions that prevent you from getting into the flow state and doing your best work.",[24,6322,6324],{"id":6323},"strategies-to-avoid-distractions","Strategies to avoid distractions",[16,6326,6327],{},"So how can you create more focus time for yourself and avoid the distractions that come with tools like Microsoft Teams and emails? Here are some strategies that you can use to improve your productivity and concentration:",[48,6329,6330,6333,6336,6339],{},[51,6331,6332],{},"Schedule your focus time. One of the simplest ways to create more focus time is to block it on your calendar. This way, you can communicate to your colleagues and managers that you are not available for interruptions during those hours. You can also set your status on Microsoft Teams to 'Do not disturb' or 'Focus' to signal that you are busy and do not want to be disturbed. Ideally, you should schedule your focus time during your peak hours, when you feel the most energized and creative.",[51,6334,6335],{},"Turn off notifications. Another way to avoid distractions is to turn off or mute the notifications from Microsoft Teams, emails, and other apps that may interrupt you. You can also close or minimize the windows or tabs that are not related to your current task. This will help you avoid the temptation to check them constantly and lose your focus. You can also use tools like Focus Assist on Windows 10 or Do Not Disturb on Mac OS to block notifications from all apps during your focus time.",[51,6337,6338],{},"Set boundaries and expectations. Sometimes, the biggest source of distraction is not the technology, but the people. You may have colleagues or managers who expect you to respond immediately to their messages or requests, even if they are not urgent or important. To avoid this, you need to set clear boundaries and expectations with them. You can let them know in advance when you are planning to have your focus time and how they can reach you in case of emergencies. You can also ask them to respect your focus time and not interrupt you unless it is absolutely necessary. You can also use tools like MyAnalytics on Microsoft 365 to track and share your availability and work patterns with others.",[51,6340,6341],{},"Take breaks and recharge. Finally, remember that focus time is not about working non-stop for hours without any breaks. That can lead to burnout and reduced performance. Instead, you should take regular breaks and recharge your energy and attention. You can use techniques 52\u002F17 method, which involves working for 52 minutes and then breaking for 17, or the 90\u002F20 method, where you work for 90 minutes and then take a break for 20, are alternative techniques to consider.  You can also use your breaks to check your messages, emails, or other notifications that you may have missed during your focus time. This way, you can balance your work and communication needs without compromising your productivity or quality.",[16,6343,6344],{},"Focus time is essential for developers who want to do their best work and deliver value to their customers and stakeholders. By using these strategies, you can create more focus time for yourself and avoid the distractions that come with tools like Microsoft Teams and emails. You can also improve your concentration, creativity, and satisfaction with your work.",[156,6346],{"style":1145,"src":6347,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Foig_2.png",[1118,6349],{},[1118,6351],{},[24,6353,6355],{"id":6354},"focus-time-as-it-relates-to-the-different-roles-in-a-development-team","Focus time as it relates to the different roles in a development team",[16,6357,6358],{},"Focus time can differ for different roles in a software development team depending on their responsibilities and tasks. For example:",[48,6360,6361,6364,6367,6370,6373],{},[51,6362,6363],{},"Developers may need more uninterrupted time for coding and debugging, so they may require longer periods of focus time without distractions.",[51,6365,6366],{},"Designers may need to spend more time on creative tasks such as brainstorming, sketching, and prototyping, so they may require a more flexible schedule for their focus time.",[51,6368,6369],{},"Project managers may need to balance their focus time between tasks such as planning, monitoring progress, and communicating with stakeholders, so they may require a mix of uninterrupted and collaborative focus time.",[51,6371,6372],{},"QA testers may need to spend more time on testing and troubleshooting, so they may require a focused and systematic approach to their work.",[51,6374,6375,6376,6378,6381,6383,6385],{},"It's important to understand the unique needs of each role and support them in creating an environment that enables them to do their best work.",[1118,6377],{},[156,6379],{"style":1145,"src":6380,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Foig_3a.png",[1118,6382],{},[1118,6384],{},[24,6386,6388],{"id":6387},"what-about-each-individual-and-peak-productivity-times","What about each individual and peak productivity times?",[16,6390,6391],{},"As a software manager, it's important to recognize that each member of your team has their own productivity times. To support their individual needs and maximize their potential, consider providing flexibility for your staff to find times that best suit themselves.",[16,6393,6394],{},"Encourage your team to identify their own productivity times and communicate them with the rest of the team. By doing so, everyone can work together to accommodate each other's schedules and minimize interruptions during focus time. You can also provide tools and resources such as shared calendars and project management software to facilitate collaboration and coordination.",[16,6396,6397],{},"Remember that flexibility does not mean sacrificing productivity or quality. Instead, it means finding a balance between individual needs and team goals. By fostering a culture of respect, trust, and communication, you can create an environment where everyone can thrive and contribute their best work.",[24,6399,4677],{"id":4676},[16,6401,6402,6403,6406],{},"In conclusion, ",[19,6404,6405],{},"focus time is essential for developers"," who want to do their best work and deliver value to their customers and stakeholders. By using the strategies outlined in this article, developers can carve out time to focus and avoid distractions, while managers can support their staff by providing flexibility and accommodating individual needs. With a little planning and discipline, everyone can find their focus time and achieve their goals.",{"title":1080,"searchDepth":1081,"depth":1081,"links":6408},[6409,6410,6411,6412],{"id":6316,"depth":1084,"text":6317},{"id":6323,"depth":1084,"text":6324},{"id":6354,"depth":1084,"text":6355},{"id":4676,"depth":1084,"text":4677},"2023-04-17","Developers need uninterrupted focus time to do their best work, but distractions from tools like Microsoft Teams and emails can be a challenge. Strategies include scheduling focus time, turning off notifications, setting boundaries, and taking breaks to recharge.","\u002Farticles\u002Fimages\u002Foig_1.png",{},"\u002Farticles\u002Fflow_state_developer",{"title":6311,"description":6414},"articles\u002Fflow_state_developer",[1109,1110],"9_u7s1d6USHcBCBQYi3yxmqbAzWDoJ-YRoDNm0GjRRc",{"id":6423,"title":6424,"author":8,"body":6425,"createdAt":6543,"description":6544,"extension":1101,"img":6545,"meta":6546,"navigation":1104,"path":6547,"seo":6548,"stem":6549,"tags":6550,"updatedAt":6551,"__hash__":6552},"articles\u002Farticles\u002Fdevelopersorganizedasteam.md","Development as a Team",{"type":10,"value":6426,"toc":6536},[6427,6431,6434,6439,6441,6443,6447,6450,6453,6456,6459,6462,6464,6466,6470,6473,6476,6493,6496,6500,6503,6520,6523,6527,6530,6533],[24,6428,6430],{"id":6429},"agile-team-oriented-development-collaboration","Agile, Team-Oriented Development, Collaboration",[16,6432,6433],{},"In today's fast-paced technology landscape, software development has become an increasingly complex and challenging task. With the rise of agile methodologies, companies are shifting towards more collaborative and team-oriented approaches to software development. This has given rise to the concept of \"development as a team\", where application developers are organized and function as a team, evolving components, applications, and solutions on each other.",[156,6435],{"style":1145,"src":6436,"alt":158,"title":6437,"height":6438},"\u002Farticles\u002Fimages\u002Fdevelopers2.png","team development","200px",[1118,6440],{},[1118,6442],{},[24,6444,6446],{"id":6445},"benefits-and-rewards","Benefits and Rewards",[16,6448,6449],{},"One of the key benefits of development as a team is faster development. By leveraging each other's skills and experience, developers can create better products more quickly. This can help companies stay ahead of their competition and respond to changing market demands more rapidly.",[16,6451,6452],{},"In addition to faster development, development as a team can also lead to higher quality products. By working together, developers can share best practices and enforce coding standards. This can help to ensure that the code is well-written, tested thoroughly, and free of bugs.",[16,6454,6455],{},"Another benefit of development as a team is greater flexibility. By working together, developers can adapt more quickly to changing requirements and customer needs. This can help companies to stay ahead of the curve and deliver products that meet customer demands.",[16,6457,6458],{},"Overall, development as a team is a powerful approach to software development that can help companies stay competitive in today's fast-paced technology landscape. By fostering collaboration, faster development, higher quality products, and greater flexibility, development as a team can help companies to meet the challenges of modern software development head-on.",[156,6460],{"style":1145,"src":6461,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fdevelopers3.png",[1118,6463],{},[1118,6465],{},[24,6467,6469],{"id":6468},"maximizing-team-dynamics-for-success","Maximizing Team Dynamics for Success",[16,6471,6472],{},"Collaboration is a key aspect of having application developers organized and functioning as a team, and it refers to the process of working together towards a common goal. When developers collaborate effectively, they are able to share their knowledge, expertise, and experience to create better products and solutions.",[16,6474,6475],{},"There are several ways that collaboration can benefit application development teams, including:",[2652,6477,6478,6481,6484,6487,6490],{},[51,6479,6480],{},"Idea Generation: Collaboration can lead to the generation of new ideas that may not have been considered by individual developers working alone. By pooling their knowledge and brainstorming together, developers can come up with more creative and innovative solutions.",[51,6482,6483],{},"Improved Communication: Effective collaboration requires clear and open communication among team members. When developers communicate well with each other, they can avoid misunderstandings and ensure that everyone is on the same page.",[51,6485,6486],{},"Division of Labor: Collaboration allows teams to divide tasks among team members according to their skills and experience. This can lead to more efficient use of resources and faster development.",[51,6488,6489],{},"Faster Problem Solving: When problems arise during development, collaboration can help teams to solve them more quickly. By working together, developers can identify the root cause of the problem and come up with a solution more effectively than if they were working alone.",[51,6491,6492],{},"Shared Learning: Collaboration allows team members to learn from each other's experiences and expertise. This can lead to a more knowledgeable and skilled team overall.",[16,6494,6495],{},"Collaboration is an essential component of having application developers organized and functioning as a team. It allows team members to work together towards a common goal, generate new ideas, communicate effectively, divide tasks efficiently, solve problems more quickly, and share knowledge and expertise.",[24,6497,6499],{"id":6498},"how-to-setup-for-success","How to setup for Success",[16,6501,6502],{},"Experienced solution developers play a crucial role in orchestrating team development and collaboration. They can provide guidance, support, and leadership to ensure that the team is working together effectively and efficiently towards a common goal. Here are some ways that experienced solution developers can orchestrate team development and collaboration:",[2652,6504,6505,6508,6511,6514,6517],{},[51,6506,6507],{},"Establishing Clear Goals and Objectives: Experienced solution developers can help to establish clear goals and objectives for the team. This can help to ensure that everyone is working towards a common goal, and that there is a shared understanding of what needs to be achieved.",[51,6509,6510],{},"Providing Mentorship and Guidance: Experienced solution developers can provide mentorship and guidance to less experienced team members. This can help to ensure that everyone on the team is learning and growing, and that knowledge and expertise are being shared effectively.",[51,6512,6513],{},"Facilitating Communication: Effective communication is essential for collaboration, and experienced solution developers can help to facilitate communication among team members. This can include regular team meetings, one-on-one check-ins, and other forms of communication that help to keep everyone on the same page.",[51,6515,6516],{},"Encouraging Collaboration: Experienced solution developers can encourage collaboration among team members by creating a culture that values teamwork and knowledge-sharing. This can include providing opportunities for team members to work together on projects, sharing best practices and lessons learned, and celebrating team successes.",[51,6518,6519],{},"Enforcing Coding Standards: Experienced solution developers can help to enforce coding standards and best practices within the team. This can help to ensure that code is well-written, tested thoroughly, and free of bugs, which can improve the quality of the final product.",[16,6521,6522],{},"Experienced solution developers can play a critical role in orchestrating team development and collaboration. By establishing clear goals and objectives, providing mentorship and guidance, facilitating communication, encouraging collaboration, and enforcing coding standards, they can help to ensure that the team is working together effectively and efficiently towards a common goal.",[24,6524,6526],{"id":6525},"results-oriented","Results Oriented",[16,6528,6529],{},"Team development in combination with experienced solution developer leads is definitely a key to success in software development. By organizing developers into a team and fostering collaboration, companies can leverage the knowledge, experience, and expertise of each team member to create better products and solutions. Experienced solution developers can provide mentorship and guidance to the team, enforce coding standards and best practices, and facilitate effective communication and collaboration among team members. This can lead to faster development, higher quality products, and greater flexibility, which can help companies stay ahead of the competition and meet the challenges of modern software development. Therefore, team development in combination with experienced solution developers is a powerful approach that can help companies achieve success in the ever-evolving technology landscape.",[16,6531,6532],{},"It is true that companies often overlook the value of an architect to lead the development team and rely solely on developers to self-organize. However, an experienced architect can bring significant value to the development process by providing technical leadership and guidance to the team. They can help to ensure that the architecture is sound, the code is scalable and maintainable, and that the development process is efficient and effective. Additionally, an architect can help to identify and mitigate potential issues and risks, and ensure that the team is aligned with the company's goals and objectives.",[16,6534,6535],{},"While developers are certainly capable of self-organizing to some extent, having an experienced architect to guide and lead the team can help to ensure that the development process runs smoothly and that the end product meets the company's requirements and standards. Therefore, companies should consider the value that an architect can bring to the development process and make sure that they are properly staffed and supported to lead the team towards success.",{"title":1080,"searchDepth":1081,"depth":1081,"links":6537},[6538,6539,6540,6541,6542],{"id":6429,"depth":1084,"text":6430},{"id":6445,"depth":1084,"text":6446},{"id":6468,"depth":1084,"text":6469},{"id":6498,"depth":1084,"text":6499},{"id":6525,"depth":1084,"text":6526},"2023-04-01","Organizing developers into a team and fostering collaboration is a key to success in software development. Experienced solution developers can guide the team, enforce coding standards, and facilitate communication and collaboration among team members. This can result in faster development, higher quality products, and greater flexibility, which can help companies stay competitive and meet the challenges of modern software development.","\u002Farticles\u002Fimages\u002Fdeveloper1.png",{},"\u002Farticles\u002Fdevelopersorganizedasteam",{"title":6424,"description":6544},"articles\u002Fdevelopersorganizedasteam",[1109,1110],"2023-04-06","Vn2duLsOQzfIDtFYCfh65jogYKUrkZt-uY0PDOeNVTo",{"id":6554,"title":6555,"author":8,"body":6556,"createdAt":6613,"description":6614,"extension":1101,"img":6615,"meta":6616,"navigation":1104,"path":6617,"seo":6618,"stem":6619,"tags":6620,"updatedAt":6613,"__hash__":6621},"articles\u002Farticles\u002F2023_technologyandbusiness.md","Business and Pace of Technology",{"type":10,"value":6557,"toc":6607},[6558,6562,6565,6568,6570,6572,6576,6579,6582,6585,6588,6591,6593,6595,6599,6602,6604],[24,6559,6561],{"id":6560},"pace-of-change-and-business","Pace of Change and Business",[16,6563,6564],{},"The pace of change in technology is accelerating every day, creating new opportunities and challenges for businesses. To survive and thrive in this dynamic environment, business management needs to be agile, adaptable and innovative. One of the key factors that determines the success of a business is its ability to leverage the latest technologies and solutions to solve problems, create value and gain competitive advantage.",[156,6566],{"style":1145,"src":6567,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fbusinesstech_1a.png",[1118,6569],{},[1118,6571],{},[24,6573,6575],{"id":6574},"unraveling-the-role-of-a-solution-developer","Unraveling the Role of a Solution Developer",[16,6577,6578],{},"In today's rapidly evolving technological landscape, businesses must recognize the pivotal role played by technical solution developers in driving innovation and creating value. To this end, it is essential that business management invests in recruiting, training, and retaining skilled technical solution developers.",[16,6580,6581],{},"The recruitment process should be designed to attract individuals with the necessary technical expertise, as well as a passion for problem-solving and an ability to work collaboratively in a team environment. Once hired, technical solution developers should be provided with ongoing training and development opportunities to keep their skills up to date with the latest technologies and best practices.",[16,6583,6584],{},"Retention of technical solution developers is equally critical. High-performing employees are more likely to stay with an organization when they feel valued and supported. Business management must ensure that technical solution developers receive the necessary resources, support, and feedback to enable them to perform their best. This may include providing access to cutting-edge technology, tools, and software, as well as fostering a culture of innovation and creativity within the organization.",[16,6586,6587],{},"Investing in technical solution developers has numerous benefits for businesses. A strong team of technical solution developers can help organizations stay ahead of the curve by identifying new opportunities for growth and helping to implement solutions that increase productivity, efficiency, and customer satisfaction. Furthermore, by creating a positive work environment for technical solution developers, businesses can attract and retain top talent, which can ultimately lead to a competitive advantage in the marketplace.",[156,6589],{"style":1145,"src":6590,"alt":158,"title":158},"\u002Farticles\u002Fimages\u002Fbusinesstech_2.png",[1118,6592],{},[1118,6594],{},[24,6596,6598],{"id":6597},"the-versatile-and-dynamic-role-of-technical-solution-developers-skills-traits-and-career-growth","The Versatile and Dynamic Role of Technical Solution Developers: Skills, Traits, and Career Growth",[16,6600,6601],{},"Technical solution developers are not just coders or programmers who write lines of code. They are creative thinkers who can analyze complex problems, design elegant solutions, test and debug them, and deploy and maintain them. They are also communicators who can collaborate with other developers, stakeholders and end-users, and document their work clearly and concisely. They are also learners who can keep up with the changing technologies and tools, and continuously improve their skills and knowledge.",[24,6603,4677],{"id":4676},[16,6605,6606],{},"In conclusion, recognizing the value and importance of technical solution developers is crucial for businesses that seek to succeed in today's fast-paced technological landscape. By investing in recruitment, training, retention, and support of technical solution developers, business management can build a strong and innovative team that can help achieve the organization's goals and vision.",{"title":1080,"searchDepth":1081,"depth":1081,"links":6608},[6609,6610,6611,6612],{"id":6560,"depth":1084,"text":6561},{"id":6574,"depth":1084,"text":6575},{"id":6597,"depth":1084,"text":6598},{"id":4676,"depth":1084,"text":4677},"2023-03-25","As technology continues to advance at an accelerating pace, it can be challenging for individuals and businesses to keep up with the latest developments. The constant flow of new tools, techniques, and technologies can make it difficult to stay current and relevant in the field.","\u002Farticles\u002Fimages\u002Ftechbusiness_sm.png",{},"\u002Farticles\u002F2023_technologyandbusiness",{"title":6555,"description":6614},"articles\u002F2023_technologyandbusiness",[1109,1110],"Lk4_S6KhlBlRiQv-HIKaXPn0SPS2zPijH1EpTcvSGE4",{"id":6623,"title":6624,"author":8,"body":6625,"createdAt":6748,"description":6749,"extension":1101,"img":5654,"meta":6750,"navigation":1104,"path":6751,"seo":6752,"stem":6753,"tags":6754,"updatedAt":6748,"__hash__":6755},"articles\u002Farticles\u002Fgit_merge_conflicts.md","Resolving Merge Conflicts Enhance Your Understanding and Decision Making Skills",{"type":10,"value":6626,"toc":6741},[6627,6631,6634,6638,6641,6645,6648,6668,6672,6675,6678,6720,6723,6725,6728,6731],[24,6628,6630],{"id":6629},"git-merge-conflicts-understanding-and-resolving-them","Git Merge Conflicts: Understanding and Resolving Them",[16,6632,6633],{},"Git is a powerful version control system used by developers to track changes made to their codebase over time.\nOne of the key features of Git is its ability to merge changes made by multiple developers into a single codebase.\nHowever, this process can sometimes result in conflicts that need to be resolved before the merge can be completed.\nIn this article, we'll take a closer look at git merge conflicts, why they occur, and how to resolve them.",[24,6635,6637],{"id":6636},"what-are-git-merge-conflicts","What are Git Merge Conflicts?",[16,6639,6640],{},"Git merge conflicts occur when changes made by multiple developers to the same file or\nlines of code conflict with each other. Git is not able to automatically determine which changes should\nbe included in the final version, so it prompts the user to manually resolve the conflicts. Merge conflicts\ncan happen in any situation where multiple people are working on the same codebase, whether it's a\nsmall team or a large open-source project.",[24,6642,6644],{"id":6643},"why-do-git-merge-conflicts-happen","Why Do Git Merge Conflicts Happen?",[16,6646,6647],{},"Git merge conflicts happen when two or more developers make changes to the same file or lines of code.\nThis can happen for several reasons, such as:",[48,6649,6650,6656,6662],{},[51,6651,6652,6655],{},[19,6653,6654],{},"Parallel Development:"," When multiple developers are working on the same codebase, they may work on the same file or lines of code without realizing it.",[51,6657,6658,6661],{},[19,6659,6660],{},"Time Lags:"," Sometimes, developers may work on the same file or lines of code at different times, and their changes conflict with each other.",[51,6663,6664,6667],{},[19,6665,6666],{},"Code Complexity:"," As the complexity of the codebase increases, it becomes more challenging to avoid merge conflicts, especially when dealing with a large team of developers.",[24,6669,6671],{"id":6670},"how-to-resolve-git-merge-conflicts","How to Resolve Git Merge Conflicts?",[16,6673,6674],{},"Resolving Git merge conflicts can be a bit daunting, especially for developers\nwho are new to the process. However, with some practice and patience, it's possible to become proficient at\nresolving merge conflicts.",[16,6676,6677],{},"Here are some steps you can follow to resolve Git merge conflicts:",[48,6679,6680,6686,6692,6698,6704,6714],{},[51,6681,6682,6685],{},[19,6683,6684],{},"Identify the Conflicting Files:"," When a merge conflict occurs, Git will highlight the files that have conflicts. You can use the command 'git status' to identify the files with conflicts.",[51,6687,6688,6691],{},[19,6689,6690],{},"Open the Conflicting Files:"," Open the files with conflicts in your preferred text editor. Git will highlight the conflicting sections of the file.",[51,6693,6694,6697],{},[19,6695,6696],{},"Understand the Conflict:"," Read through the conflicting sections of the file to understand what changes were made and why they conflict.",[51,6699,6700,6703],{},[19,6701,6702],{},"Choose the Correct Changes:"," Decide which changes should be included in the final version of the file. You can keep one set of changes, discard both sets of changes, or merge the changes manually.",[51,6705,6706,6709,6710],{},[19,6707,6708],{},"Save the Changes:"," Once you've made the necessary changes, save the file and add it to the staging area using the command 'git add ",[6711,6712,6713],"filename",{},"'.",[51,6715,6716,6719],{},[19,6717,6718],{},"Commit the Changes:"," After resolving all conflicts, commit the changes using the command 'git commit'.",[16,6721,6722],{},"Be sure to watch the video resouce provided at the bottom of this post.  It was very helpful.",[24,6724,4677],{"id":4676},[16,6726,6727],{},"Git merge conflicts are a common occurrence in the world of software development. They can be frustrating,\nbut they are also an opportunity to improve your collaboration skills and learn more about the codebase you're\nworking on. By understanding why merge conflicts happen and how to resolve them, you can become a more\nefficient and effective developer. Remember, practice makes perfect!",[16,6729,6730],{},"If you want to learn more check out some of the resources below:",[48,6732,6733],{},[51,6734,6735,6736],{},"[Merge Conflicts](",[1139,6737,6740],{"href":6738,"rel":6739},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=HosPml1qkrg",[3695],"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0gA68g269NA",{"title":1080,"searchDepth":1081,"depth":1081,"links":6742},[6743,6744,6745,6746,6747],{"id":6629,"depth":1084,"text":6630},{"id":6636,"depth":1084,"text":6637},{"id":6643,"depth":1084,"text":6644},{"id":6670,"depth":1084,"text":6671},{"id":4676,"depth":1084,"text":4677},"2023-03-21","Current state of Google Flutter mobile application development",{},"\u002Farticles\u002Fgit_merge_conflicts",{"title":6624,"description":6749},"articles\u002Fgit_merge_conflicts",[5660,5661],"kKr_tSrf_WUYdKasSxMM-rxeUxgH7Pg3nWbQLGMHaEg",{"id":6757,"title":6758,"author":8,"body":6759,"createdAt":6900,"description":6749,"extension":1101,"img":6901,"meta":6902,"navigation":1104,"path":6903,"seo":6904,"stem":6905,"tags":6906,"updatedAt":6900,"__hash__":6908},"articles\u002Farticles\u002F2023_flutter-update.md","2023 In Flutter",{"type":10,"value":6760,"toc":6892},[6761,6765,6768,6772,6775,6778,6782,6785,6817,6821,6824,6856,6859,6861,6864,6867,6889],[1948,6762,6764],{"id":6763},"flutter-a-rising-star-in-mobile-development","Flutter: A Rising Star in Mobile Development",[16,6766,6767],{},"If you are looking for a fast, productive, and flexible way to build beautiful mobile apps for iOS and Android, you might want to consider Flutter. Flutter is an open-source UI toolkit created by Google that enables developers to create native-looking apps from a single codebase. In this post, we will explore some of the benefits and features of Flutter, as well as some of the amazing examples of Flutter apps in the market.",[24,6769,6771],{"id":6770},"what-is-flutter","What is Flutter?",[16,6773,6774],{},"Flutter is a relatively new framework that was introduced by Google in 2018. It is based on Dart, a language optimized for fast apps on any platform. Flutter uses a declarative approach to build UI components, which are called widgets. Widgets can be composed together to create complex layouts and animations. Widgets are also reactive, meaning they can update their state based on user input or data changes.",[16,6776,6777],{},"Flutter compiles its code to native machine code for iOS and Android, as well as JavaScript for web and desktop applications. This means that Flutter apps can run with high performance and smoothness on any device. Flutter also supports hot reload and hot restart features, which allow developers to see changes almost instantly without losing state or restarting the app.",[24,6779,6781],{"id":6780},"why-choose-flutter","Why Choose Flutter?",[16,6783,6784],{},"Flutter offers many advantages over other mobile development frameworks, such as:",[48,6786,6787,6793,6799,6805,6811],{},[51,6788,6789,6792],{},[19,6790,6791],{},"Cross-platform:"," You can target multiple platforms with one codebase, reducing development time and cost.",[51,6794,6795,6798],{},[19,6796,6797],{},"Native-like:"," You can create apps that look and feel natural on any device, with full access to native features and services.",[51,6800,6801,6804],{},[19,6802,6803],{},"Customizable:"," You have full control over every pixel of your app, with the ability to create custom widgets and themes.",[51,6806,6807,6810],{},[19,6808,6809],{},"Productive:"," You can build and iterate quickly with hot reload and hot restart, as well as use powerful developer tools like Flutter DevTools and DartPad.",[51,6812,6813,6816],{},[19,6814,6815],{},"Ecosystem:"," You can leverage a rich set of packages and plugins from pub.dev, as well as join a vibrant community of developers and supporters.",[24,6818,6820],{"id":6819},"examples-of-flutter-apps","Examples of Flutter Apps",[16,6822,6823],{},"Flutter has been used by many well-known brands and startups around the world to create stunning mobile apps. Here are some examples:",[48,6825,6826,6832,6838,6844,6850],{},[51,6827,6828,6831],{},[19,6829,6830],{},"Google Pay:"," Google's digital wallet app uses Flutter to provide a seamless payment experience across devices and regions.",[51,6833,6834,6837],{},[19,6835,6836],{},"Reflectly:"," A personal journaling app that uses AI to help users improve their mental health. Reflectly uses Flutter to design unique digital experiences with animations and transitions.",[51,6839,6840,6843],{},[19,6841,6842],{},"Nubank:"," A leading fintech company in Latin America that offers digital banking services. Nubank uses Flutter to scale its app with integrity and maintainability.",[51,6845,6846,6849],{},[19,6847,6848],{},"Hamilton:"," The official app of the hit Broadway musical that allows fans to access exclusive content, trivia games, merchandise, and more. Hamilton uses Flutter to take the theater experience beyond the stage.",[51,6851,6852,6855],{},[19,6853,6854],{},"Dream11:"," India's largest fantasy sports platform that supports over 50 million users. Dream11 uses Flutter to deliver high-performance gaming experiences with rich graphics.",[16,6857,6858],{},"These are just some of the many examples of how Flutter can help you create amazing mobile apps for any screen.",[24,6860,4677],{"id":4676},[16,6862,6863],{},"Flutter is a rising star in mobile development that offers many benefits for developers and users alike. It is fast, productive, flexible, cross-platform,\nnative-like, and customizable. It also has a growing ecosystem of packages, plugins, and community support.",[16,6865,6866],{},"If you want to learn more about Flutter, you can visit flutter.dev to get started or check out some of the resources below:",[48,6868,6869,6875,6882],{},[51,6870,6871],{},[1139,6872,6874],{"href":6740,"rel":6873},[3695],"Learn how to build platform adaptive apps",[51,6876,6877],{},[1139,6878,6881],{"href":6879,"rel":6880},"https:\u002F\u002Fflutter.dev\u002Fdocs\u002Fcookbook",[3695],"Reference code examples and sample applications",[51,6883,6884],{},[1139,6885,6888],{"href":6886,"rel":6887},"https:\u002F\u002Fflutter.dev\u002Froadmap",[3695],"See where we’re going and how to be involved",[16,6890,6891],{},"We hope this post has given you some insights into why Flutter is popular in mobile development and how it can help you bring your app idea to life.",{"title":1080,"searchDepth":1081,"depth":1081,"links":6893},[6894],{"id":6763,"depth":1081,"text":6764,"children":6895},[6896,6897,6898,6899],{"id":6770,"depth":1084,"text":6771},{"id":6780,"depth":1084,"text":6781},{"id":6819,"depth":1084,"text":6820},{"id":4676,"depth":1084,"text":4677},"2023-03-20","\u002Farticles\u002Fimages\u002Fflutter_small.png",{},"\u002Farticles\u002F2023_flutter-update",{"title":6758,"description":6749},"articles\u002F2023_flutter-update",[6907],"flutter","5jAliBWInaB24ApOYvmWOjWXsOqTtg3yVPQOcU9lY50",{"id":6910,"title":6911,"author":8,"body":6912,"createdAt":6981,"description":6982,"extension":1101,"img":6983,"meta":6984,"navigation":1104,"path":6985,"seo":6986,"stem":6987,"tags":6988,"updatedAt":6981,"__hash__":6991},"articles\u002Farticles\u002Flocal_tunnel.md","Unleash your localhost on the world!",{"type":10,"value":6913,"toc":6979},[6914,6923,6926,6940,6945,6950,6961,6966,6974],[16,6915,6916,6917],{},"Expose your local development web service to the world with\n",[1139,6918,6922],{"href":6919,"target":1142,"rel":6920},"https:\u002F\u002Ftheboroer.github.io\u002Flocaltunnel-www\u002F",[6921],"noopener","Localtunnel!",[16,6924,6925],{},"No need to fuss with DNS and firewall settings",[48,6927,6928,6931,6934,6937],{},[51,6929,6930],{},"Simply install Localtunnel (which requires NodeJS) globally and use the command line interface to request a tunnel to your local server.",[51,6932,6933],{},"You'll receive a unique, publicly accessible URL that will proxy all requests to your locally running webserver.",[51,6935,6936],{},"Just share the URL with anyone you want to have access, and as long as your local instance of Localtunnel remains active, all requests will be routed to your local service.",[51,6938,6939],{},"Quick and easy!",[16,6941,6942],{},[19,6943,6944],{},"Install",[16,6946,6947],{},[2239,6948,6949],{},"npm install -g localtunnel",[16,6951,6952,6955,6956,6960],{},[19,6953,6954],{},"Start a webserver on some local port"," (eg ",[1139,6957,6958],{"href":6958,"rel":6959},"http:\u002F\u002Flocalhost:8000",[3695],") and use the command line interface to request a tunnel to your local server:",[16,6962,6963],{},[2239,6964,6965],{},"lt --port 8000",[16,6967,6968,6969,6973],{},"As long as your local instance of lt remains active, you will be given a unique URL, such as ",[1139,6970,6971],{"href":6971,"rel":6972},"https:\u002F\u002Fflkajsfljas.loca.lt",[3695],",\nwhich can be shared with anyone. All requests made to this URL will be directed to your local service at the specified port.",[16,6975,6976],{},[156,6977],{"alt":1080,"src":6978},"\u002Farticles\u002Fimages\u002Flocaltunnel_2.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":6980},[],"2022-12-29","It is necessary to share my localhost web application with the world in order for it to be accessed from other devices and individuals.","\u002Farticles\u002Fimages\u002Flocaltunnel.png",{},"\u002Farticles\u002Flocal_tunnel",{"title":6911,"description":6982},"articles\u002Flocal_tunnel",[6989,6990],"node","npm","i2TIUL53Z4P3kfhtPeZT9twwmIdeoCYgSTI3DaIf1OE",{"id":6993,"title":6994,"author":8,"body":6995,"createdAt":7076,"description":7077,"extension":1101,"img":7078,"meta":7079,"navigation":1104,"path":7080,"seo":7081,"stem":7082,"tags":7083,"updatedAt":7076,"__hash__":7085},"articles\u002Farticles\u002Fandroid-emulator-playstore.md","How to install Google Play - Android Emulator",{"type":10,"value":6996,"toc":7074},[6997,7000],[16,6998,6999],{},"Working more and more with Android Emulators I am finding not all images have Play Store installed.  The following are 3 easy steps that I have used to get Google Play Store installed and ready upon creation of new emulator.",[2652,7001,7002,7039,7063],{},[51,7003,7004,7005,7007,7010,7013,7015,7016,7018,7019,7021,7022,7024,7025,7027,7028,7030,7031,7033,7036,7038],{},"Create Virtual Device.  Here I am selecting Nexus 5 and setting some default parameters that have worked well for me.",[1118,7006],{},[156,7008],{"alt":1080,"src":7009},"\u002Farticles\u002Fimages\u002Fandroidemulator_playstore1.png",[156,7011],{"alt":1080,"src":7012},"\u002Farticles\u002Fimages\u002Fandroidemulator_playstore2.png",[1118,7014],{},"Emulated Performance",[1118,7017],{},"\nGraphics: Hardware - GLES 2.0",[1118,7020],{},"RAM 4096",[1118,7023],{},"\nVM Heap 512",[1118,7026],{},"\nInternal Storage 16024",[1118,7029],{},"\nStudio Managed 4096",[1118,7032],{},[156,7034],{"alt":1080,"src":7035},"\u002Farticles\u002Fimages\u002Fandroidemulator_playstore3.png",[1118,7037],{},"Finish",[51,7040,7041,7044,7045,7047,7049,7050,7052,7054,7056,7057,7059,7062],{},[19,7042,7043],{},"BEFORE"," opening the image do the following.  Open the host directory on the file system.  For me this was C:\\Users\\{username}\\.android\\avd\\Pixel_5_API_30.avd and find the config.ini.  At this point there should be very few files in this directory.  OPEN config.ini",[1118,7046],{},[19,7048,3065],{}," \"PlayStore.enabled=false\" to \"PlayStore.enabled=true\"",[1118,7051],{},[19,7053,3065],{},[1118,7055],{},"\nimage.sysdir.1 = system-images\\android-30\\google_apis\\x86\\",[1118,7058],{},[19,7060,7061],{},"TO","\nimage.sysdir.1 = system-images\\android-30\\google_apis_playstore\\x86\\",[51,7064,7065,7066,1200,7069,7071],{},"Return to Android Virtual Device manager and start the image.  At this point, there will be no indication that the Play Store is installed on this device however after starting up it will display correctly.  ",[19,7067,7068],{},"Start the emulator",[1118,7070],{},[156,7072],{"alt":1080,"src":7073},"\u002Farticles\u002Fimages\u002Fandroidemulator_playstore4.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":7075},[],"2022-03-27","When working with Android emulators not all come pre-installed with the PlayStore installed.  The following are steps to enable PlayStore on startup.","\u002Farticles\u002Fimages\u002Fyourvirtualdevices.png",{},"\u002Farticles\u002Fandroid-emulator-playstore",{"title":6994,"description":7077},"articles\u002Fandroid-emulator-playstore",[7084,6907],"android","TK1c3u6kKnpGHVSJSDz-765FoWfNMQ8t-QwTaF-h5vQ",{"id":7087,"title":7088,"author":8,"body":7089,"createdAt":7445,"description":7446,"extension":1101,"img":6901,"meta":7447,"navigation":1104,"path":7448,"seo":7449,"stem":7450,"tags":7451,"updatedAt":7452,"__hash__":7453},"articles\u002Farticles\u002Fflutter-update28.md","Flutter Change Android minSdkVersion After Update",{"type":10,"value":7090,"toc":7443},[7091,7094,7100,7103,7110,7116,7121,7127,7137,7386,7392,7438,7441],[16,7092,7093],{},"When creating a flutter app the content of android\\app\\build.gradle is the following.",[2232,7095,7098],{"className":7096,"code":7097,"language":2237},[2235],"defaultConfig {\n\u002F\u002F TODO: Specify your own unique Application ID (https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fapplication-id.html).  \napplicationId \"com.example.app_name\"  \nminSdkVersion flutter.minSdkVersion  \ntargetSdkVersion flutter.targetSdkVersion  \nversionCode flutterVersionCode.toInteger()  \nversionName flutterVersionName\n}  \n",[2239,7099,7097],{"__ignoreMap":1080},[16,7101,7102],{},"Where do these values come from?",[16,7104,7105,7106,7109],{},"flutter.minSdkVersion value is coming from your installed flutter SDK's flutter.gradle file which is located inside ",[2239,7107,7108],{},"your_flutter_sdk\u002Fpackages\u002Fflutter_tools\u002Fgradle\u002Fflutter.gradle","\nRight now Jan 2023 it looks like...",[2232,7111,7114],{"className":7112,"code":7113,"language":2237},[2235],"\u002F** Sets the compileSdkVersion used by default in Flutter app projects. *\u002F\nstatic int compileSdkVersion = 31\n\n\u002F** Sets the minSdkVersion used by default in Flutter app projects. *\u002F\nstatic int minSdkVersion = 16\n\n\u002F** Sets the targetSdkVersion used by default in Flutter app projects. *\u002F\nstatic int targetSdkVersion = 31\n\n\u002F**\n * Sets the ndkVersion used by default in Flutter app projects.\n * Chosen as default version of the AGP version below.\n *\u002F\nstatic String ndkVersion = \"21.1.6352462\"\n",[2239,7115,7113],{"__ignoreMap":1080},[16,7117,7118],{},[19,7119,7120],{},"Moving forward, how do we change these defaults?",[16,7122,7123,7124,7126],{},"With the 2.8 release where the minimum and target SDK versions is set\u002Festablished has changed within the Flutter project.",[1118,7125],{},"\nHow to change Android minSdkVersion in flutter project?  There are a couple approaches provided below.",[16,7128,7129,7132,7133,7136],{},[19,7130,7131],{},"Approach 1."," You can change the minSdkVersion directly in the file Project_Name\u002Fandroid\u002Fapp\u002F",[19,7134,7135],{},"build.gradle"," , defaultconfig",[2232,7138,7141],{"className":7139,"code":7140,"language":6907,"meta":1080,"style":1080},"language-flutter shiki shiki-themes github-light github-dark","    defaultConfig {\n    \u002F\u002F TODO: Specify your own unique Application ID (https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fapplication-id.html).\n    applicationId \"com.example.projectname\"\n    minSdkVersion 16 \u002F\u002F \u003C--- There\n    targetSdkVersion 27\n    versionCode 1\n    versionName \"1.0\"\n    testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"}\n```\n\n\n\n**Approach 2.** The more appropriate way and maintainable approach is a little more involved however I would recommend.\n\nFor clarity, I will provide what the build.gradle looked like before and after the 2.8 update.\n\n```flutter\n    android {\n        compileSdkVersion 30\n    \n    defaultConfig {\n        applicationId \"com.example.app\"\n        minSdkVersion 21\n        targetSdkVersion 30\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        multiDexEnabled true\n    }        \n```\n\nAfter updating to Flutter 2.8:\n\n```flutter\n    android {\n        compileSdkVersion flutter.compileSdkVersion\n    \n    defaultConfig {\n            applicationId \"com.example.app\"\n            minSdkVersion flutter.minSdkVersion\n            targetSdkVersion flutter.targetSdkVersion\n            versionCode flutterVersionCode.toInteger()\n            versionName flutterVersionName\n        }\n``` \n\nSo here are the changes so that you can maintain the version(s) within your project.  \n\n**Update the android -> local.properties** adding the following 3 lines.  This will be where you set the min and target versions going forward.\n```flutter\nflutter.minSdkVersion=21\nflutter.targetSdkVersion=30\nflutter.compileSdkVersion=30\n",[2239,7142,7143,7148,7153,7158,7163,7168,7173,7178,7183,7188,7192,7196,7200,7205,7209,7214,7218,7223,7228,7233,7237,7241,7246,7251,7256,7261,7266,7271,7276,7280,7284,7289,7293,7297,7301,7306,7310,7314,7319,7324,7329,7334,7339,7344,7349,7353,7358,7362,7367,7371,7376,7381],{"__ignoreMap":1080},[4215,7144,7145],{"class":4217,"line":4218},[4215,7146,7147],{},"    defaultConfig {\n",[4215,7149,7150],{"class":4217,"line":1081},[4215,7151,7152],{},"    \u002F\u002F TODO: Specify your own unique Application ID (https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fbuild\u002Fapplication-id.html).\n",[4215,7154,7155],{"class":4217,"line":1084},[4215,7156,7157],{},"    applicationId \"com.example.projectname\"\n",[4215,7159,7160],{"class":4217,"line":4234},[4215,7161,7162],{},"    minSdkVersion 16 \u002F\u002F \u003C--- There\n",[4215,7164,7165],{"class":4217,"line":4240},[4215,7166,7167],{},"    targetSdkVersion 27\n",[4215,7169,7170],{"class":4217,"line":4246},[4215,7171,7172],{},"    versionCode 1\n",[4215,7174,7175],{"class":4217,"line":4252},[4215,7176,7177],{},"    versionName \"1.0\"\n",[4215,7179,7180],{"class":4217,"line":4258},[4215,7181,7182],{},"    testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"}\n",[4215,7184,7185],{"class":4217,"line":4264},[4215,7186,7187],{},"```\n",[4215,7189,7190],{"class":4217,"line":4270},[4215,7191,4231],{"emptyLinePlaceholder":1104},[4215,7193,7194],{"class":4217,"line":4276},[4215,7195,4231],{"emptyLinePlaceholder":1104},[4215,7197,7198],{"class":4217,"line":4282},[4215,7199,4231],{"emptyLinePlaceholder":1104},[4215,7201,7202],{"class":4217,"line":4288},[4215,7203,7204],{},"**Approach 2.** The more appropriate way and maintainable approach is a little more involved however I would recommend.\n",[4215,7206,7207],{"class":4217,"line":4294},[4215,7208,4231],{"emptyLinePlaceholder":1104},[4215,7210,7211],{"class":4217,"line":4300},[4215,7212,7213],{},"For clarity, I will provide what the build.gradle looked like before and after the 2.8 update.\n",[4215,7215,7216],{"class":4217,"line":4306},[4215,7217,4231],{"emptyLinePlaceholder":1104},[4215,7219,7220],{"class":4217,"line":4312},[4215,7221,7222],{},"```flutter\n",[4215,7224,7225],{"class":4217,"line":4318},[4215,7226,7227],{},"    android {\n",[4215,7229,7230],{"class":4217,"line":4324},[4215,7231,7232],{},"        compileSdkVersion 30\n",[4215,7234,7235],{"class":4217,"line":4330},[4215,7236,4261],{},[4215,7238,7239],{"class":4217,"line":4336},[4215,7240,7147],{},[4215,7242,7243],{"class":4217,"line":4342},[4215,7244,7245],{},"        applicationId \"com.example.app\"\n",[4215,7247,7248],{"class":4217,"line":4348},[4215,7249,7250],{},"        minSdkVersion 21\n",[4215,7252,7253],{"class":4217,"line":4353},[4215,7254,7255],{},"        targetSdkVersion 30\n",[4215,7257,7258],{"class":4217,"line":4359},[4215,7259,7260],{},"        versionCode flutterVersionCode.toInteger()\n",[4215,7262,7263],{"class":4217,"line":4365},[4215,7264,7265],{},"        versionName flutterVersionName\n",[4215,7267,7268],{"class":4217,"line":4371},[4215,7269,7270],{},"        multiDexEnabled true\n",[4215,7272,7273],{"class":4217,"line":4377},[4215,7274,7275],{},"    }        \n",[4215,7277,7278],{"class":4217,"line":4383},[4215,7279,7187],{},[4215,7281,7282],{"class":4217,"line":4389},[4215,7283,4231],{"emptyLinePlaceholder":1104},[4215,7285,7286],{"class":4217,"line":4395},[4215,7287,7288],{},"After updating to Flutter 2.8:\n",[4215,7290,7291],{"class":4217,"line":4401},[4215,7292,4231],{"emptyLinePlaceholder":1104},[4215,7294,7295],{"class":4217,"line":4406},[4215,7296,7222],{},[4215,7298,7299],{"class":4217,"line":4412},[4215,7300,7227],{},[4215,7302,7303],{"class":4217,"line":4418},[4215,7304,7305],{},"        compileSdkVersion flutter.compileSdkVersion\n",[4215,7307,7308],{"class":4217,"line":4423},[4215,7309,4261],{},[4215,7311,7312],{"class":4217,"line":4429},[4215,7313,7147],{},[4215,7315,7316],{"class":4217,"line":4435},[4215,7317,7318],{},"            applicationId \"com.example.app\"\n",[4215,7320,7321],{"class":4217,"line":4440},[4215,7322,7323],{},"            minSdkVersion flutter.minSdkVersion\n",[4215,7325,7326],{"class":4217,"line":4446},[4215,7327,7328],{},"            targetSdkVersion flutter.targetSdkVersion\n",[4215,7330,7331],{"class":4217,"line":4452},[4215,7332,7333],{},"            versionCode flutterVersionCode.toInteger()\n",[4215,7335,7336],{"class":4217,"line":4458},[4215,7337,7338],{},"            versionName flutterVersionName\n",[4215,7340,7341],{"class":4217,"line":4464},[4215,7342,7343],{},"        }\n",[4215,7345,7346],{"class":4217,"line":4469},[4215,7347,7348],{},"``` \n",[4215,7350,7351],{"class":4217,"line":4475},[4215,7352,4231],{"emptyLinePlaceholder":1104},[4215,7354,7355],{"class":4217,"line":4481},[4215,7356,7357],{},"So here are the changes so that you can maintain the version(s) within your project.  \n",[4215,7359,7360],{"class":4217,"line":4487},[4215,7361,4231],{"emptyLinePlaceholder":1104},[4215,7363,7364],{"class":4217,"line":4492},[4215,7365,7366],{},"**Update the android -> local.properties** adding the following 3 lines.  This will be where you set the min and target versions going forward.\n",[4215,7368,7369],{"class":4217,"line":4498},[4215,7370,7222],{},[4215,7372,7373],{"class":4217,"line":4504},[4215,7374,7375],{},"flutter.minSdkVersion=21\n",[4215,7377,7378],{"class":4217,"line":4510},[4215,7379,7380],{},"flutter.targetSdkVersion=30\n",[4215,7382,7383],{"class":4217,"line":4516},[4215,7384,7385],{},"flutter.compileSdkVersion=30\n",[16,7387,7388,7391],{},[19,7389,7390],{},"Add\u002Fmodify to the android\u002Fsrc\u002Fbuild.gradle"," file",[2232,7393,7395],{"className":7139,"code":7394,"language":6907,"meta":1080,"style":1080},"    android {\n        compileSdkVersion localProperties.getProperty('flutter.compileSdkVersion').toInteger()\n    ...\n    defaultConfig {\n        minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()\n        targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n    }\n",[2239,7396,7397,7401,7406,7411,7415,7420,7425,7429,7433],{"__ignoreMap":1080},[4215,7398,7399],{"class":4217,"line":4218},[4215,7400,7227],{},[4215,7402,7403],{"class":4217,"line":1081},[4215,7404,7405],{},"        compileSdkVersion localProperties.getProperty('flutter.compileSdkVersion').toInteger()\n",[4215,7407,7408],{"class":4217,"line":1084},[4215,7409,7410],{},"    ...\n",[4215,7412,7413],{"class":4217,"line":4234},[4215,7414,7147],{},[4215,7416,7417],{"class":4217,"line":4240},[4215,7418,7419],{},"        minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()\n",[4215,7421,7422],{"class":4217,"line":4246},[4215,7423,7424],{},"        targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()\n",[4215,7426,7427],{"class":4217,"line":4252},[4215,7428,7260],{},[4215,7430,7431],{"class":4217,"line":4258},[4215,7432,7265],{},[4215,7434,7435],{"class":4217,"line":4264},[4215,7436,7437],{},"    }\n",[16,7439,7440],{},"Keep in mind with this approach going forward you will maintain minimum and target SDK versions within the local.properties file.",[4682,7442,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":7444},[],"2022-01-17","With the recent 2.8 release how and where the minSdkVersion is specified has changed.  It took a while to figure out, so I thought I would share this recent tip.",{},"\u002Farticles\u002Fflutter-update28",{"title":7088,"description":7446},"articles\u002Fflutter-update28",[6907],"2023-01-01","yIViXfuP1XC3oBwA4eXSe_aiiqi3_lCpBvlr4ZC9lfM",{"id":7455,"title":7456,"author":8,"body":7457,"createdAt":7518,"description":7519,"extension":1101,"img":6901,"meta":7520,"navigation":1104,"path":7521,"seo":7522,"stem":7523,"tags":7524,"updatedAt":7518,"__hash__":7525},"articles\u002Farticles\u002Fflutter-tips2.md","Flutter Tips 2",{"type":10,"value":7458,"toc":7516},[7459,7462,7514],[16,7460,7461],{},"Tips and Tricks",[2652,7463,7464,7478,7501,7512],{},[51,7465,7466,7467,7469,7472,7474,7475,7477],{},"Create application icons via online resource for Android and IOS platforms",[1118,7468],{},[156,7470],{"alt":1080,"src":7471},"\u002Farticles\u002Fimages\u002Fappicongenerator.png",[1118,7473],{},"android\u002Fapp\u002Fsrc\u002Fmain\u002Fres (copy all midmap)",[1118,7476],{},"ios\u002Frunner\u002Fassets.xcassets (copy all files to this xcassets from the download from appicongenerator tool)",[51,7479,7480,7481],{},"How can I remove the Flutter debug banner?",[2232,7482,7484],{"className":7139,"code":7483,"language":6907,"meta":1080,"style":1080},"MaterialApp(\n  debugShowCheckedModeBanner: false,\n) \n",[2239,7485,7486,7491,7496],{"__ignoreMap":1080},[4215,7487,7488],{"class":4217,"line":4218},[4215,7489,7490],{},"MaterialApp(\n",[4215,7492,7493],{"class":4217,"line":1081},[4215,7494,7495],{},"  debugShowCheckedModeBanner: false,\n",[4215,7497,7498],{"class":4217,"line":1084},[4215,7499,7500],{},")\n",[51,7502,7503,7504],{},"Resources",[48,7505,7506],{},[51,7507,7508],{},[1139,7509,7511],{"href":7510,"target":1142},"https:\u002F\u002Fopenweathermap.org\u002F","OpenWeather",[51,7513],{},[4682,7515,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":7517},[],"2021-12-07","Series of tips and tricks related to Flutter mobile platform from Google",{},"\u002Farticles\u002Fflutter-tips2",{"title":7456,"description":7519},"articles\u002Fflutter-tips2",[6907],"Pu3cp_L2QtZXyVxsa0SJsYa1RZNP3Kc1PoNk_f_Oq2o",{"id":7527,"title":7528,"author":8,"body":7529,"createdAt":7550,"description":7551,"extension":1101,"img":6901,"meta":7552,"navigation":1104,"path":7553,"seo":7554,"stem":7555,"tags":7556,"updatedAt":7550,"__hash__":7557},"articles\u002Farticles\u002Fflutter-androidsdk.md","Android SDK Manage",{"type":10,"value":7530,"toc":7548},[7531,7537,7540,7545],[16,7532,7533,7534],{},"If running Flutter Doctor and receiving ",[1128,7535,7536],{},"\"Android sdkmanager not found. Update to the latest Android SDK and ensure that the cmdline-tools are installed to resolve this.\"",[16,7538,7539],{},"Open up Android Studio - Tool SDK Manager - Android SDK and note also the SDK Tools tab where addition installs can be selected as well as \"Android SDK Command-line Tools\"",[16,7541,7542],{},[156,7543],{"alt":1080,"src":7544},"\u002Farticles\u002Fimages\u002Fandroidstudio_android_commandlinetools.png",[16,7546,7547],{},"Note also here you can view your Android SDK Location: C:\\Users{username}\\AppData\\Local\\Android\\Sdk",{"title":1080,"searchDepth":1081,"depth":1081,"links":7549},[],"2021-12-06","Windows - Use Android Studio to manaage Android Studio Installation",{},"\u002Farticles\u002Fflutter-androidsdk",{"title":7528,"description":7551},"articles\u002Fflutter-androidsdk",[6907,7084],"lgLzSiWzrJuDfmQ3vNfpd-WnicLBZPSpOs_OpW4y22Y",{"id":7559,"title":7560,"author":8,"body":7561,"createdAt":7550,"description":7613,"extension":1101,"img":7614,"meta":7615,"navigation":1104,"path":7616,"seo":7617,"stem":7618,"tags":7619,"updatedAt":7550,"__hash__":7621},"articles\u002Farticles\u002Fmygoals.md","My Goals (with Learning)",{"type":10,"value":7562,"toc":7611},[7563,7568,7571,7576,7579,7584,7587,7592,7595,7600,7603,7608],[16,7564,7565],{},[19,7566,7567],{},"1. Why do I want to learn this skill?",[16,7569,7570],{},"What does it mean to you? What are your motivations? Will you prove something to yourself or\npeople around you? Will you get a raise because you’re better at your job or will you get a better job?",[16,7572,7573],{},[19,7574,7575],{},"2. What will I achieve if I learn this skill?",[16,7577,7578],{},"Which doors will this skill open for you? Will you be able to earn more, have more flexibility in your\nwork hours, work remotely and travel more?",[16,7580,7581],{},[19,7582,7583],{},"3. How will this skill change my life and my career?",[16,7585,7586],{},"Would you get a raise at your current job or more respect from your boss once you’ve learnt this skill?  Or will you be at Facebook, Amazon or Google instead?  How would your life change?",[16,7588,7589],{},[19,7590,7591],{},"4. How will learning this skill impact the lives of my family, friends and coworkers?",[16,7593,7594],{},"What will you be able to do for your family or friends once you’ve learnt this skill? How will it change\nthe way they think of you? Will your coworkers respect you more?",[16,7596,7597],{},[19,7598,7599],{},"5. How will I feel if I never accomplish this?",[16,7601,7602],{},"Would you feel disappointed? Would you feel like you’ve missed out?",[16,7604,7605],{},[19,7606,7607],{},"6. What would my life look like if I manage to accomplish this?",[16,7609,7610],{},"Visualise it. What would life look like from the moment you wake up to the time you go to sleep? Will\nyou be living by the sea? Would you kiss your beautiful wife\u002Fhusband when you wake up?",{"title":1080,"searchDepth":1081,"depth":1081,"links":7612},[],"While doing some self learning over the weekend, I established the following goal list to help me stay motivated and focused.  Keeping goals small and achievable is the most important aspect.  Use this list of questions to help you.","\u002Farticles\u002Fimages\u002Fmygoals.png",{},"\u002Farticles\u002Fmygoals",{"title":7560,"description":7613},"articles\u002Fmygoals",[7620],"selfimprovement","_Y-1E07zoTUk59E0ca0AR_L6_bcw4qd0Mj2YLCQpvAQ",{"id":7623,"title":7624,"author":8,"body":7625,"createdAt":7757,"description":7519,"extension":1101,"img":6901,"meta":7758,"navigation":1104,"path":7759,"seo":7760,"stem":7761,"tags":7762,"updatedAt":7757,"__hash__":7763},"articles\u002Farticles\u002Fflutter-tips1.md","Flutter Tips 1",{"type":10,"value":7626,"toc":7755},[7627,7629],[16,7628,7461],{},[2652,7630,7631,7641,7660,7666,7732,7735,7749],{},[51,7632,7466,7633,7635,7637,7474,7639,7477],{},[1118,7634],{},[156,7636],{"alt":1080,"src":7471},[1118,7638],{},[1118,7640],{},[51,7642,7643,7644],{},"Android recently starting putting round images around your uploaded icon.  If you want to modify the           uploaded icon you can manipulate with Android Studio (right clicking on android\u002Fapp\u002Fsrc\u002Fmain\u002Fres folder).      See option New Image Asset? If you do not (like me), I had to perform the following steps in order to see      this option.",[48,7645,7646,7649,7652],{},[51,7647,7648],{},"Close Android Studio (for my Flutter project)    then reopen the Android folder",[51,7650,7651],{},"Options were available to update Gradle (in my case from 4.x to 7.x), I chose yes.",[51,7653,7654,7655,7657],{},"Once finished this update, New Image Asset was option when I right clicked on the res folder (as a test I returned to my parent Flutter parent folder but did not have this option once again)  So for me to see this Image Asset option I had to open with Android Studio the Android folder directly within my Flutter project.",[1118,7656],{},[156,7658],{"alt":1080,"src":7659},"\u002Farticles\u002Fimages\u002Fflutter_tip1_newimageasset.png",[51,7661,7662,7663],{},"Use Android Studio Image Asset to resize icon's as desired to fit or fill the Android square, using the Scaling - Resize option in the dialog window.\n",[156,7664],{"alt":1080,"src":7665},"\u002Farticles\u002Fimages\u002Fandroidstudio_imageasset.png",[51,7667,7668,7669],{},"Developer resources",[48,7670,7671,7677,7683,7689,7695,7701,7707,7713,7720,7726],{},[51,7672,7673],{},[1139,7674,7675],{"href":7675,"rel":7676},"https:\u002F\u002Ficons8.com",[3695],[51,7678,7679],{},[1139,7680,7681],{"href":7681,"rel":7682},"https:\u002F\u002Fvecteezy.com",[3695],[51,7684,7685],{},[1139,7686,7687],{"href":7687,"rel":7688},"https:\u002F\u002Fappicon.co\u002F",[3695],[51,7690,7691],{},[1139,7692,7694],{"href":7693,"target":1142},"https:\u002F\u002Ffonts.google.com\u002Ficons?selected=Material+Icons","Google Material Icons",[51,7696,7697],{},[1139,7698,7700],{"href":7699,"target":1142},"https:\u002F\u002Fwww.materialpalette.com\u002F","Material Palette",[51,7702,7703],{},[1139,7704,7705],{"href":7705,"rel":7706},"https:\u002F\u002Fmaterial.io",[3695],[51,7708,7709],{},[1139,7710,7712],{"href":7711,"target":1142},"https:\u002F\u002Fmedium.com\u002Fflutter-community\u002Fflutter-layout-cheat-sheet-5363348d037e","Flutter Layout Cheatsheet",[51,7714,7715,7719],{},[1139,7716,7718],{"href":7717,"target":1142},"https:\u002F\u002Ffonts.google.com\u002F","Google Fonts"," (free for commercial use)",[51,7721,7722],{},[1139,7723,7725],{"href":7724,"target":1142},"https:\u002F\u002Fdribbble.com\u002F","Creative Ideas",[51,7727,7728],{},[1139,7729,7730],{"href":7730,"rel":7731},"https:\u002F\u002Fwww.colorzilla.com\u002F",[3695],[51,7733,7734],{},"If hot reload is not working for you, remember that it only       works when you change something within a Stateful Widget.",[51,7736,7737,7738,7740,7743,7745,7746],{},"Null safety error messages",[1118,7739],{},[1128,7741,7742],{},"\"lib\u002Fmain.dart:8:19: Error: Null safety features are disabled for this library.\nTry removing the package language version or setting the language version to 2.12 or higher.\nconst MyApp({Key? key}) : super(key: key);\"",[1118,7744],{},"Open pubspec.yaml and change to  ",[19,7747,7748],{},"sdk: \">=2.12.0 \u003C 3.0.0\"",[51,7750,7751,7754],{},[19,7752,7753],{},"Ctrl-q"," shows quick docs within Intelli J",{"title":1080,"searchDepth":1081,"depth":1081,"links":7756},[],"2021-12-05",{},"\u002Farticles\u002Fflutter-tips1",{"title":7624,"description":7519},"articles\u002Fflutter-tips1",[6907],"RV1o32MPObtGs1CFr_GYKGsTtQv9W6HwBn1rJRz6hgE",{"id":7765,"title":7766,"author":8,"body":7767,"createdAt":7757,"description":7850,"extension":1101,"img":7851,"meta":7852,"navigation":1104,"path":7853,"seo":7854,"stem":7855,"tags":7856,"updatedAt":7757,"__hash__":7857},"articles\u002Farticles\u002Ftool-ditto.md","Tool Tip Ditto Must Have",{"type":10,"value":7768,"toc":7848},[7769,7772,7775,7816,7829,7834,7842,7845],[16,7770,7771],{},"Ditto is an extension to the standard windows clipboard. It saves each item placed on the clipboard allowing you access to any of those items at a later time. Ditto allows you to save any type of information that can be put on the clipboard, text, images, html, custom formats, ..... The features below are simple and just worth repeating within this entry.",[16,7773,7774],{},"Features",[48,7776,7777,7780,7783,7786,7789,7792,7795,7798,7801,7804,7807],{},[51,7778,7779],{},"Easy to use interface",[51,7781,7782],{},"Search and paste previous copy entries",[51,7784,7785],{},"Keep multiple computer's clipboards in sync",[51,7787,7788],{},"Data is encrypted when sent over the network",[51,7790,7791],{},"Accessed from tray icon or global hot key",[51,7793,7794],{},"Select entry by double click, enter key or drag drop",[51,7796,7797],{},"Paste into any window that excepts standard copy\u002Fpaste entries",[51,7799,7800],{},"Display thumbnail of copied images in list",[51,7802,7803],{},"Full Unicode support(display foreign characters)",[51,7805,7806],{},"UTF-8 support for language files(create language files in any language)",[51,7808,7809,7810,7815],{},"Uses sqlite database (",[1139,7811,7814],{"href":7812,"rel":7813},"http:\u002F\u002Fwww.sqlite.org",[3695],"www.sqlite.org",")",[16,7817,7818,7819,7823,7824,7828],{},"The extension can be found at ",[1139,7820,7822],{"href":7821,"target":1142},"https:\u002F\u002Fditto-cp.sourceforge.io\u002F","Ditto","  Source code and issues are tracked via ",[1139,7825,7827],{"href":7826,"target":1142},"https:\u002F\u002Fgithub.com\u002Fsabrogden\u002FDitto","github","  Written in c++",[16,7830,7831],{},[156,7832],{"alt":1080,"src":7833},"\u002Farticles\u002Fimages\u002Fditto.png",[16,7835,7836,7837,7839],{},"I use this extension daily on all my workstations.  I am able to Copy (Ctrl-C) anything and then use keyboard shortcut Alt-Z to show the last x number (confiburable) of copies display in a pop-up.",[1118,7838],{},[156,7840],{"alt":1080,"src":7841},"\u002Farticles\u002Fimages\u002Fditto_screen1.png",[16,7843,7844],{},"Anything in ditto can be found by searching in the open dialog box.  This feature is invaluable when trying to find content from a couple of days ago.  Ditto starts on system startup and is always just available.",[16,7846,7847],{},"I have tried other clipboard manager tools, but this one is just small, easy and allows me copy\u002Fpaste text, code, images from days in the past.",{"title":1080,"searchDepth":1081,"depth":1081,"links":7849},[],"Clipboard utility that is a must have.  Easy to use interface, search and paste previous copy entries, keep multiple computer's clipboards in sync, accessed from tray icon or global hot key, display a thumbnail of copied images etc.","\u002Farticles\u002Fimages\u002Fditto1.png",{},"\u002Farticles\u002Ftool-ditto",{"title":7766,"description":7850},"articles\u002Ftool-ditto",[4701],"ffOa-BrPCpCv3DthBZ8NpYKGXC5GM95KYDG6MZjz1Sw",{"id":7859,"title":7860,"author":8,"body":7861,"createdAt":8101,"description":8102,"extension":1101,"img":8103,"meta":8104,"navigation":1104,"path":8105,"seo":8106,"stem":8107,"tags":8108,"updatedAt":8101,"__hash__":8109},"articles\u002Farticles\u002Frename-sql-server-schema.md","Rename SQL Server Schema",{"type":10,"value":7862,"toc":8099},[7863,7866,7869,8097],[16,7864,7865],{},"Copying SQL Databases, renaming is not as easy as it could be.  Luckily the following script can make the effort much easier.  Give it a try.",[16,7867,7868],{},"After copying a SQL Server database I needed to create a new schema and transfer all tables and views and stored procedures\nfrom the old schema to the newly created schema.  Using the following script made this task much easier.",[2232,7870,7874],{"className":7871,"code":7872,"language":7873,"meta":1080,"style":1080},"language-sql shiki shiki-themes github-light github-dark","DECLARE @OldSchema AS varchar(255)\nDECLARE @NewSchema AS varchar(255)\n\nSET @OldSchema = 'dbo'\nSET @NewSchema = 'StackOverflow'\n\nDECLARE @sql AS varchar(MAX)\n\nDECLARE @Schema AS varchar(MAX)\nDECLARE @Obj AS varchar(MAX)\n\n-- First transfer Tables and Views\n\nDECLARE CU_OBJS CURSOR FOR\nSELECT TABLE_SCHEMA, TABLE_NAME\nFROM INFORMATION_SCHEMA.TABLES\nWHERE TABLE_SCHEMA = @OldSchema\n\nOPEN CU_OBJS\n\nFETCH NEXT FROM CU_OBJS\nINTO @Schema, @Obj\n\nWHILE @@FETCH_STATUS = 0\nBEGIN\nSELECT @sql = 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + @OldSchema + '].[' + @Obj + ']'\nPRINT @sql\n--  EXEC (@sql)\n\n    FETCH NEXT FROM CU_OBJS\n    INTO @Schema, @Obj\nEND\n\nCLOSE CU_OBJS\nDEALLOCATE CU_OBJS\n\n\n-- Now transfer Stored Procedures\n\nDECLARE CU_OBJS CURSOR FOR\nSELECT sys.schemas.name, sys.procedures.name\nFROM sys.procedures,sys.schemas\nWHERE sys.procedures.schema_id=sys.schemas.schema_id and sys.schemas.name = @OldSchema\n\nOPEN CU_OBJS\n\nFETCH NEXT FROM CU_OBJS\nINTO @Schema, @Obj\n","sql",[2239,7875,7876,7881,7886,7890,7895,7900,7904,7909,7913,7918,7923,7927,7932,7936,7941,7946,7951,7956,7960,7965,7969,7974,7979,7983,7988,7993,7998,8003,8008,8012,8017,8022,8027,8031,8036,8041,8045,8049,8054,8058,8062,8067,8072,8077,8081,8085,8089,8093],{"__ignoreMap":1080},[4215,7877,7878],{"class":4217,"line":4218},[4215,7879,7880],{},"DECLARE @OldSchema AS varchar(255)\n",[4215,7882,7883],{"class":4217,"line":1081},[4215,7884,7885],{},"DECLARE @NewSchema AS varchar(255)\n",[4215,7887,7888],{"class":4217,"line":1084},[4215,7889,4231],{"emptyLinePlaceholder":1104},[4215,7891,7892],{"class":4217,"line":4234},[4215,7893,7894],{},"SET @OldSchema = 'dbo'\n",[4215,7896,7897],{"class":4217,"line":4240},[4215,7898,7899],{},"SET @NewSchema = 'StackOverflow'\n",[4215,7901,7902],{"class":4217,"line":4246},[4215,7903,4231],{"emptyLinePlaceholder":1104},[4215,7905,7906],{"class":4217,"line":4252},[4215,7907,7908],{},"DECLARE @sql AS varchar(MAX)\n",[4215,7910,7911],{"class":4217,"line":4258},[4215,7912,4231],{"emptyLinePlaceholder":1104},[4215,7914,7915],{"class":4217,"line":4264},[4215,7916,7917],{},"DECLARE @Schema AS varchar(MAX)\n",[4215,7919,7920],{"class":4217,"line":4270},[4215,7921,7922],{},"DECLARE @Obj AS varchar(MAX)\n",[4215,7924,7925],{"class":4217,"line":4276},[4215,7926,4231],{"emptyLinePlaceholder":1104},[4215,7928,7929],{"class":4217,"line":4282},[4215,7930,7931],{},"-- First transfer Tables and Views\n",[4215,7933,7934],{"class":4217,"line":4288},[4215,7935,4231],{"emptyLinePlaceholder":1104},[4215,7937,7938],{"class":4217,"line":4294},[4215,7939,7940],{},"DECLARE CU_OBJS CURSOR FOR\n",[4215,7942,7943],{"class":4217,"line":4300},[4215,7944,7945],{},"SELECT TABLE_SCHEMA, TABLE_NAME\n",[4215,7947,7948],{"class":4217,"line":4306},[4215,7949,7950],{},"FROM INFORMATION_SCHEMA.TABLES\n",[4215,7952,7953],{"class":4217,"line":4312},[4215,7954,7955],{},"WHERE TABLE_SCHEMA = @OldSchema\n",[4215,7957,7958],{"class":4217,"line":4318},[4215,7959,4231],{"emptyLinePlaceholder":1104},[4215,7961,7962],{"class":4217,"line":4324},[4215,7963,7964],{},"OPEN CU_OBJS\n",[4215,7966,7967],{"class":4217,"line":4330},[4215,7968,4231],{"emptyLinePlaceholder":1104},[4215,7970,7971],{"class":4217,"line":4336},[4215,7972,7973],{},"FETCH NEXT FROM CU_OBJS\n",[4215,7975,7976],{"class":4217,"line":4342},[4215,7977,7978],{},"INTO @Schema, @Obj\n",[4215,7980,7981],{"class":4217,"line":4348},[4215,7982,4231],{"emptyLinePlaceholder":1104},[4215,7984,7985],{"class":4217,"line":4353},[4215,7986,7987],{},"WHILE @@FETCH_STATUS = 0\n",[4215,7989,7990],{"class":4217,"line":4359},[4215,7991,7992],{},"BEGIN\n",[4215,7994,7995],{"class":4217,"line":4365},[4215,7996,7997],{},"SELECT @sql = 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + @OldSchema + '].[' + @Obj + ']'\n",[4215,7999,8000],{"class":4217,"line":4371},[4215,8001,8002],{},"PRINT @sql\n",[4215,8004,8005],{"class":4217,"line":4377},[4215,8006,8007],{},"--  EXEC (@sql)\n",[4215,8009,8010],{"class":4217,"line":4383},[4215,8011,4231],{"emptyLinePlaceholder":1104},[4215,8013,8014],{"class":4217,"line":4389},[4215,8015,8016],{},"    FETCH NEXT FROM CU_OBJS\n",[4215,8018,8019],{"class":4217,"line":4395},[4215,8020,8021],{},"    INTO @Schema, @Obj\n",[4215,8023,8024],{"class":4217,"line":4401},[4215,8025,8026],{},"END\n",[4215,8028,8029],{"class":4217,"line":4406},[4215,8030,4231],{"emptyLinePlaceholder":1104},[4215,8032,8033],{"class":4217,"line":4412},[4215,8034,8035],{},"CLOSE CU_OBJS\n",[4215,8037,8038],{"class":4217,"line":4418},[4215,8039,8040],{},"DEALLOCATE CU_OBJS\n",[4215,8042,8043],{"class":4217,"line":4423},[4215,8044,4231],{"emptyLinePlaceholder":1104},[4215,8046,8047],{"class":4217,"line":4429},[4215,8048,4231],{"emptyLinePlaceholder":1104},[4215,8050,8051],{"class":4217,"line":4435},[4215,8052,8053],{},"-- Now transfer Stored Procedures\n",[4215,8055,8056],{"class":4217,"line":4440},[4215,8057,4231],{"emptyLinePlaceholder":1104},[4215,8059,8060],{"class":4217,"line":4446},[4215,8061,7940],{},[4215,8063,8064],{"class":4217,"line":4452},[4215,8065,8066],{},"SELECT sys.schemas.name, sys.procedures.name\n",[4215,8068,8069],{"class":4217,"line":4458},[4215,8070,8071],{},"FROM sys.procedures,sys.schemas\n",[4215,8073,8074],{"class":4217,"line":4464},[4215,8075,8076],{},"WHERE sys.procedures.schema_id=sys.schemas.schema_id and sys.schemas.name = @OldSchema\n",[4215,8078,8079],{"class":4217,"line":4469},[4215,8080,4231],{"emptyLinePlaceholder":1104},[4215,8082,8083],{"class":4217,"line":4475},[4215,8084,7964],{},[4215,8086,8087],{"class":4217,"line":4481},[4215,8088,4231],{"emptyLinePlaceholder":1104},[4215,8090,8091],{"class":4217,"line":4487},[4215,8092,7973],{},[4215,8094,8095],{"class":4217,"line":4492},[4215,8096,7978],{},[4682,8098,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":8100},[],"2020-10-13T13:50:59.878Z","Copying SQL Databases, renaming is not as easy as it could be.  Luckily the following script can make the effort much easier.  Give it a try. After copying a SQL Server database I needed to create a new schema and transfer all tables and views and stored procedures from the old schema to the newly created schema.  Using the following script made this task much easier.","\u002Farticles\u002Fimages\u002Fsingleton_thumb.png",{},"\u002Farticles\u002Frename-sql-server-schema",{"title":7860,"description":8102},"articles\u002Frename-sql-server-schema",[7873],"mvDlpJpU00m0MVu_Frr5AdZnQYdcoEq59ox8SmjvJgs",{"id":8111,"title":8112,"author":8,"body":8113,"createdAt":8177,"description":8178,"extension":1101,"img":8174,"meta":8179,"navigation":1104,"path":8180,"seo":8181,"stem":8182,"tags":8183,"updatedAt":8177,"__hash__":8184},"articles\u002Farticles\u002Fazure-appservice-http-error-50030-ancm-in-process-start-failure.md","Azure AppService HTTP Error 500.30 ANCM InProcess Start Failure",{"type":10,"value":8114,"toc":8175},[8115,8118,8121,8124,8127,8130,8136,8142,8144,8146,8157,8161,8172],[16,8116,8117],{},"Again, up against the 500.30 –> really means that something is wrong (usually configuration, appsettings incorrect etc.) which prevents the application from starting up.",[16,8119,8120],{},"Todays', resolution…",[16,8122,8123],{},"- Launch Kudu from the Azure Portal (under Advanced Tools)",[16,8125,8126],{},"- Use Debug console – CMD",[16,8128,8129],{},"- Use command prompt DOS commands to navigate to \\site\\wwwroot",[16,8131,8132,8133],{},"- Try starting the application via dotnet web.dll ",[1128,8134,8135],{},"(the name of your web application dll)",[16,8137,8138,8141],{},[1128,8139,8140],{},"- ","With any luck, the output will show log errors and with some thought you can decipher what configuration piece is missing (in this case, my connection string was incorrect and I was missing App_Data directory)",[1118,8143],{},[1118,8145],{},[48,8147,8148,8151,8154],{},[51,8149,8150],{},"The application failed to start",[51,8152,8153],{},"The application started but then stopped",[51,8155,8156],{},"The application started but threw an exception during startup",[1150,8158,8160],{"id":8159},"troubleshooting-steps","Troubleshooting steps:",[48,8162,8163,8166,8169],{},[51,8164,8165],{},"Check the system event log for error messages",[51,8167,8168],{},"Enable logging the application process' stdout messages",[51,8170,8171],{},"Attach a debugger to the application process and inspect",[1139,8173],{"href":8174},"\u002Farticles\u002Fimages\u002Fimage_637348425926534448.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":8176},[],"2020-09-04T18:56:32.880Z","While hosting an application within Azure AppService, I was up against the dreaded 500.30 ANCM exception.  Following is an approach to help get to resolution.",{},"\u002Farticles\u002Fazure-appservice-http-error-50030-ancm-in-process-start-failure",{"title":8112,"description":8178},"articles\u002Fazure-appservice-http-error-50030-ancm-in-process-start-failure",[5087],"k2bCHrW85oXKlPnYGZmUFSD9tgg9OapWFupo2DLTSBs",{"id":8186,"title":8187,"author":8,"body":8188,"createdAt":8348,"description":8349,"extension":1101,"img":8350,"meta":8351,"navigation":1104,"path":8352,"seo":8353,"stem":8354,"tags":8355,"updatedAt":8348,"__hash__":8357},"articles\u002Farticles\u002Fhot-module-reload-hmr-issues.md","Hot Module Reload (HMR) Issues",{"type":10,"value":8189,"toc":8346},[8190,8193,8200,8210,8217,8220,8223,8228,8235,8238,8343],[16,8191,8192],{},"Using latest vue.js bit and vue-cli to create a project, I immediately came up against HMR not reloading after making changes to .vue files.",[16,8194,8195,8196,8199],{},"What is HMR\n\"",[19,8197,8198],{},"Hot Reload","\" is not simply reloading the page when you edit a file. With hot reload enabled, when you edit a *. vue file,\nall instances of that component will be swapped in without reloading the page. It even preserves the current state of your app and these swapped\ncomponents!",[16,8201,8202,8203,8206,8209],{},"I started my project npm run serve, opened my browser ",[1139,8204],{"href":8205},"http:\u002F\u002Flocalhost:8080",[1139,8207,8205],{"href":8205,"rel":8208},[3695]," and navigated around my new app.\nGreat. Within my IDE I modified any vue file, I could see that vue-cli-server (with it’s built in web server) identified that\na file had changed and I could see webpack rebuilding my ts\u002Fjs files. Great. I looked at the browser and my simple html change was not reflected.\nI could see errors in the chrome dev tools network tab like following.",[13,8211,8212,8213,8216],{},"\n[WDS] Disconnected net:: ERR_CONNECTION_TIMED_OUT ",[1139,8214,8215],{"title":8215,"href":8215},"http:\u002F\u002F192.168.1.102:8080\u002Fsockjs-node\u002Finfo?t=1598645595925"," \n",[16,8218,8219],{},"###Solution\nThere are a number of articles regarding setting NODE_ENV=development,\nas well as articles discussing the vue.config.js file. The solution for me was modifying the package.json script that is\nused by npm to start the project from",[16,8221,8222],{},"\"serve\": \"vue-cli-service serve\",",[16,8224,8225],{},[19,8226,8227],{},"To",[16,8229,8230,8231,8234],{},"\"serve2\": \"vue-cli-service serve ",[19,8232,8233],{},"--host localhost","\",",[16,8236,8237],{},"I also tried a number of options within the vue.config.js but was able to remove once I identified the solution (above).",[2232,8239,8243],{"className":8240,"code":8241,"language":8242,"meta":1080,"style":1080},"language-js shiki shiki-themes github-light github-dark","\u002F\u002F vue.config.js \nmodule.exports = {\n    devServer: \n          {  \u002F\u002Fhost:'localhost'  \n              \u002F\u002F useLocalIp: false,  \n            \u002F\u002F proxy: 'http:\u002F\u002Flocalhost:8080',  \n            \u002F\u002F public: '172.23.3.180:8080',  \n            \u002F\u002F watchOptions: {  \n            \u002F\u002F poll: true  \n            \u002F\u002F }  \n            }, configureWebpack: {  \n                      plugins: [\n                      \u002F\u002Fnew MyAwesomeWebpackPlugin()  \n                      ] \n                  }\n            }\n","js",[2239,8244,8245,8251,8270,8275,8283,8288,8293,8298,8303,8308,8313,8318,8323,8328,8333,8338],{"__ignoreMap":1080},[4215,8246,8247],{"class":4217,"line":4218},[4215,8248,8250],{"class":8249},"sJ8bj","\u002F\u002F vue.config.js \n",[4215,8252,8253,8257,8260,8263,8267],{"class":4217,"line":1081},[4215,8254,8256],{"class":8255},"sj4cs","module",[4215,8258,1200],{"class":8259},"sVt8B",[4215,8261,8262],{"class":8255},"exports",[4215,8264,8266],{"class":8265},"szBVR"," =",[4215,8268,8269],{"class":8259}," {\n",[4215,8271,8272],{"class":4217,"line":1084},[4215,8273,8274],{"class":8259},"    devServer: \n",[4215,8276,8277,8280],{"class":4217,"line":4234},[4215,8278,8279],{"class":8259},"          {  ",[4215,8281,8282],{"class":8249},"\u002F\u002Fhost:'localhost'  \n",[4215,8284,8285],{"class":4217,"line":4240},[4215,8286,8287],{"class":8249},"              \u002F\u002F useLocalIp: false,  \n",[4215,8289,8290],{"class":4217,"line":4246},[4215,8291,8292],{"class":8249},"            \u002F\u002F proxy: 'http:\u002F\u002Flocalhost:8080',  \n",[4215,8294,8295],{"class":4217,"line":4252},[4215,8296,8297],{"class":8249},"            \u002F\u002F public: '172.23.3.180:8080',  \n",[4215,8299,8300],{"class":4217,"line":4258},[4215,8301,8302],{"class":8249},"            \u002F\u002F watchOptions: {  \n",[4215,8304,8305],{"class":4217,"line":4264},[4215,8306,8307],{"class":8249},"            \u002F\u002F poll: true  \n",[4215,8309,8310],{"class":4217,"line":4270},[4215,8311,8312],{"class":8249},"            \u002F\u002F }  \n",[4215,8314,8315],{"class":4217,"line":4276},[4215,8316,8317],{"class":8259},"            }, configureWebpack: {  \n",[4215,8319,8320],{"class":4217,"line":4282},[4215,8321,8322],{"class":8259},"                      plugins: [\n",[4215,8324,8325],{"class":4217,"line":4288},[4215,8326,8327],{"class":8249},"                      \u002F\u002Fnew MyAwesomeWebpackPlugin()  \n",[4215,8329,8330],{"class":4217,"line":4294},[4215,8331,8332],{"class":8259},"                      ] \n",[4215,8334,8335],{"class":4217,"line":4300},[4215,8336,8337],{"class":8259},"                  }\n",[4215,8339,8340],{"class":4217,"line":4306},[4215,8341,8342],{"class":8259},"            }\n",[4682,8344,8345],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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":1080,"searchDepth":1081,"depth":1081,"links":8347},[],"2020-08-28T20:50:38.782Z","HMR issues after creating new Vue app via vue-cli.  Hot Module Replacement (HMR) exchanges, adds, or removes modules while an aplication is running, without a full reload.  Ultimately, this significantly improves development efforts.","\u002Farticles\u002Fimages\u002Fwebpack.png",{},"\u002Farticles\u002Fhot-module-reload-hmr-issues",{"title":8187,"description":8349},"articles\u002Fhot-module-reload-hmr-issues",[8356],"vuejs","ji1AxRVh3i7FKPFuNIP_WlsYYW7t_5wc7KzZ105NyEU",{"id":8359,"title":8360,"author":8,"body":8361,"createdAt":8519,"description":8520,"extension":1101,"img":8373,"meta":8521,"navigation":1104,"path":8522,"seo":8523,"stem":8524,"tags":8525,"updatedAt":8519,"__hash__":8527},"articles\u002Farticles\u002Fasp-net-mvc-versions-microsoft-aspnet-mvc.md","ASP.NET MVC Versions of Microsoft.AspNet.Mvc",{"type":10,"value":8362,"toc":8517},[8363,8366,8376,8382,8392,8411,8413,8441,8451],[16,8364,8365],{},"While creating a new web application targeting .NET Framework 4 we see a dialog like the following.  Great all good right. ",[16,8367,8368],{},[1139,8369,8371],{"href":8370},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_2.png",[156,8372],{"style":1145,"src":8373,"alt":158,"title":158,"width":8374,"height":8375},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb.png",306,83,[16,8377,8378,8379,8381],{},"What is Microsoft.AspNet.Mvc? What is System.Web.Mvc.dll?  Are these related…in short yes.  I had some confusion as to the relationship between System.Web.Mvc and the Nuget package Microsoft.AspNet.Mvc.  Here is how….",[1118,8380],{},"\nYes, they are very much related.  Do things have to be this confusing? ",[16,8383,8384,8385],{},"So tracking this down, I created a new out-of-the-box Asp.Net MVC Application.  Afterwards, I opened up Nuget Manager in order to review what packages were installed.  I see a number of packages needing updating.  In particular, I see one Microsoft.AspNet.Mvc however I do not see this assembly in my project references.  Remember - Nuget packages can and do include one or more assemblies(dll’s) and can be named differently than the package name.  In this particular case, the package Microsoft.AspNet.Mvc contains the System.Web.Mvc.dll.  For the record, the project when created referenced this package..",[8386,8387,8391],"package",{"id":8388,"version":8389,"targetframework":8390},"Microsoft.AspNet.Mvc","4.0.30506.0","net40","  (this package includes the System.Web.Mvc.dll Runtime Version v4.0.30319, Version 4.0.0.0 and specifically Product version 4.0.20710.0 shown via file properties)",[16,8393,8394,8395,8397,8407,8408],{},"Inside the out of box .NET 4, MVC application we have…",[1118,8396],{},[1139,8398,8400],{"href":8399},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_6.png",[156,8401],{"style":8402,"src":8403,"border":8404,"alt":158,"title":158,"width":8405,"height":8406},"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;","\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb_2.png",0,260,285,"  ",[1139,8409],{"href":8410},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_4.png",[1139,8412],{"href":8410},[16,8414,8415,8422,8423,8425,8426],{},[1139,8416,8417],{"href":8410},[156,8418],{"style":8402,"src":8419,"border":8404,"alt":158,"title":158,"width":8420,"height":8421},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb_1.png",308,289," ",[1118,8424],{},"\nLooking at the System.Web.Mvc.dll that was delivered with the new .NET 4 application we have the following dll.  In addition, if we look at the existing Nuget packages in the application we have the following package ",[8386,8427,8428,8430,8438,8440],{"id":8388,"version":8389,"targetframework":8390},[1118,8429],{},[1139,8431,8433],{"href":8432},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_8.png",[156,8434],{"style":8402,"src":8435,"border":8404,"alt":158,"title":158,"width":8436,"height":8437},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb_3.png",346,264,[1118,8439],{},"\nNow, we will update the Microsoft.AspNet.Mvc version 4.0.30506.0 package to 4.0.40804.0 to see what occurs.",[16,8442,8443],{},[1139,8444,8446],{"href":8445},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_10.png",[156,8447],{"style":8402,"src":8448,"border":8404,"alt":158,"title":158,"width":8449,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb_4.png",134,240,[16,8452,8453,8454],{},"The package in the packages file was updated to ",[8386,8455,8457,8458,8407,8466,8474,8476,8479,8481,8484,8486,8487],{"id":8388,"version":8456,"targetframework":8390},"4.0.40804.0","  Looking at the project references after the update we can see System.Web.Mvc Runtime version 4.0.30319 and Version 4.0.0.1.  Note: the file in the bin directory is not updated until after a project build.  Now looking at the file properties we can see File version 4.0.40804.0 and Product version 4.040804.0\n",[1139,8459,8461],{"href":8460},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_12.png",[156,8462],{"style":8402,"src":8463,"border":8404,"alt":158,"title":158,"width":8464,"height":8465},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_thumb_5.png",138,226,[1139,8467,8469],{"href":8468},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-fa2dee033792_a6f6-image_16.png",[156,8470],{"style":8402,"src":8471,"border":8404,"alt":158,"title":158,"width":8472,"height":8473},"\u002Farticles\u002Fimageswindows-live-writer-fa2dee033792_a6f6-image_thumb_7.png",201,244,[1118,8475],{},[19,8477,8478],{},"In summary…",[1118,8480],{},[19,8482,8483],{},"Before",[1118,8485],{},"\nNuget Package: ",[8386,8488,8489,8490,8492,8495,8486,8497],{"id":8388,"version":8389,"targetframework":8390},"\nProject Reference: System.Web.Mvc.dll Runtime Version v4.0.30319, Version 4.0.0.0\nFile System: Product version 4.0.20710.0",[1118,8491],{},[19,8493,8494],{},"After",[1118,8496],{},[8386,8498,8499,8500,8502,8503],{"id":8388,"version":8456,"targetframework":8390},"\nProject Reference:System.Web.Mvc Runtime version 4.0.30319 and Version 4.0.0.1\nFile System:File version 4.0.40804.0",[1118,8501],{},"\nWe also have to note that the web.config was updated by the Nuget package, notice below the newVersion is 4.0.0.1\n",[8504,8505,8506,8507],"dependent-assembly",{},"\n  ",[8508,8509,8506,8512],"assembly-identity",{"name":8510,"publickeytoken":8511},"System.Web.Mvc","31bf3856ad364e35",[8513,8514],"binding-redirect",{"oldversion":8515,"newversion":8516},"0.0.0.0-4.0.0.1","4.0.0.1",{"title":1080,"searchDepth":1081,"depth":1081,"links":8518},[],"2020-06-11T20:28:49.852Z","Versions of Asp.net",{},"\u002Farticles\u002Fasp-net-mvc-versions-microsoft-aspnet-mvc",{"title":8360,"description":8520},"articles\u002Fasp-net-mvc-versions-microsoft-aspnet-mvc",[8526],"visualstudio","j2JjzZkhslYYQHf8dsNiFM_V-AhPEaLg23n12z9xFLw",{"id":8529,"title":8530,"author":1915,"body":8531,"createdAt":8519,"description":8614,"extension":1101,"img":8555,"meta":8615,"navigation":1104,"path":8617,"seo":8618,"stem":8619,"tags":8620,"updatedAt":8519,"__hash__":8621},"articles\u002Farticles\u002Fdevops–pushing-nuget-package-to-azure-artifacts-repository.md","DevOps–Pushing Nuget package to Azure Artifacts Repository",{"type":10,"value":8532,"toc":8612},[8533,8536,8539,8542,8545,8548,8551,8556,8559,8562,8565,8579,8582,8588,8594,8597,8604,8609],[16,8534,8535],{},"What a journey\n",[16,8537,8538],{},"I am going to document this for the sole reason that I am aware that I will once again need this information\nonly just a few days from now. Problem: I have a nuget package that I want to push to an Azure Artifact directory.",[16,8540,8541],{},"I figured easy enough there is some documentation, and I tried with the following:",[16,8543,8544],{},"nuget push -source \"MyFeed_feed\" -apikey az \"C:\\tfs\\Git\\MLayout\\MLayout\\MLayout\\bin\\Debug\\Layout.1.0.0.nupkg\"",[16,8546,8547],{},"I did have to download Nuget and ensure it was found when using the above command via command prompt. \nOnce setup, and re-ran I was prompted for username and password. As many times as I tried it would just continue to fail and eventually\nwould timeout. I am sure this worked just a few weeks ago.",[16,8549,8550],{},"Regardless on to plan B, documentation..",[16,8552,8553],{},[156,8554],{"alt":1080,"src":8555},"\u002Farticles\u002Fimages\u002Fimage_637275041288251465.png",[16,8557,8558],{},"1) I downloaded the latest Nuget.exe",[16,8560,8561],{},"2) Download and install the credential provider (this one was a bit more challenging)",[16,8563,8564],{},"I figured I would use the Automatic approach. ",[16,8566,8567,8568,8571,8574,8575,7815],{},"a) I downloaded installcredprovider.ps1 from this github location\n",[1139,8569],{"href":8570},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fartifacts-credprovider\u002Ftree\u002Fmaster\u002Fhelpers",[1139,8572,8570],{"href":8570,"rel":8573},[3695],"\n(more information can be found ",[1139,8576,8578],{"href":8577,"target":1142},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fartifacts-credprovider#azure-artifacts-credential-provider","here",[16,8580,8581],{},"b) Now that I have a file on disk, I have to run it. I started Powershell then proceeded to run this\nps1 by typing .\\installcredprovider.ps1 at the PS>",[16,8583,8584,8587],{},[156,8585],{"alt":1080,"src":8586},"\u002Farticles\u002Fimages\u002Fimage_637275041290983297.png","\nd) Now with this installed I retried to push my nuget package with nuget push -source \"MyFeed_feed\" -apikey az \"C:\\tfs\\Git\\MLayout\\MLayout\\MLayout\\bin\\Debug\\Layout.1.0.0.nupkg\"",[16,8589,8590,8593],{},[19,8591,8592],{},"No go, ","so I tried with using the vs.net command prompt.",[16,8595,8596],{},"I opened up a command prompt from Windows-Start ensuring to pick the “Developer Command Prompt for VS 2019”",[16,8598,8599,8600,8603],{},"Now, I ensured that nuget.exe was available and it was! ",[19,8601,8602],{},"So I retried my nuget push",". You can see finally, that it used the Credential Provider",[16,8605,8606],{},[156,8607],{"alt":1080,"src":8608},"\u002Farticles\u002Fimages\u002Fimage_637275041296161377.png",[16,8610,8611],{},"The entire process probably 1 hour of effort, but essentially using the VS.NET 2019 command prompt, download the ps1 for the credprovider,\nexecute using powershell then retry.",{"title":1080,"searchDepth":1081,"depth":1081,"links":8613},[],"Some days you can be really productive, and others some very simple things just seem to eat up time.  Today, I came across the latter and thought I would document for others and also myself.  Installing a credprovider in order to push a nuget package to Auzre-DevOps.  Read on...",{"name":8616},"David","\u002Farticles\u002Fdevops-pushing-nuget-package-to-azure-artifacts-repository",{"title":8530,"description":8614},"articles\u002Fdevops–pushing-nuget-package-to-azure-artifacts-repository",[5087],"Zw3qsYjIGVLIj9PIXvZHt_pkg1PaGxS6xuD33wiVVHg",{"id":8623,"title":8624,"author":8,"body":8625,"createdAt":8519,"description":8735,"extension":1101,"img":8736,"meta":8737,"navigation":1104,"path":8738,"seo":8739,"stem":8740,"tags":8741,"updatedAt":8519,"__hash__":8744},"articles\u002Farticles\u002Fmicrosoft-sqlserver-types-getting-it-done.md","Microsoft.SqlServer.Types–Getting it done.",{"type":10,"value":8626,"toc":8733},[8627,8634,8646,8700,8705,8708,8713,8716,8719,8730],[16,8628,8629,8630,8633],{},"Recently, started working with SQL Server GeoSpatial types. Specifically I am using column type ",[19,8631,8632],{},"geography. ","\nAll was working fine when using on localhost web site however after deployment to a test environment, I go the following exception.",[16,8635,8636,8637,8639,8640,8643,1200],{},"Initially, I thought something was not installed on the server (could still be) however the following is the exception and the resolution. Exception:",[1118,8638],{},"\nSystem.InvalidOperationException: Spatial types and functions are not available for this provider because the assembly ",[19,8641,8642],{},"'Microsoft.SqlServer.Types'",[19,8644,8645],{},"version 10 or higher could not be found",[2232,8647,8651],{"className":8648,"code":8649,"language":8650,"meta":1080,"style":1080},"language-html shiki shiki-themes github-light github-dark","at System.Data.Entity.SqlServer.SqlTypesAssemblyLoader.GetSqlTypesAssembly() \nat System.Data.Entity.SqlServer.SqlSpatialDataReader.\u003C.cctor>b__0() at System.Lazy`1.CreateValue() \n--- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Lazy`1.get_Value()\nat System.Data.Entity.SqlServer.SqlSpatialDataReader.GetGeography(Int32 ordinal) at\nSystem.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) at\nSystem.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetSpatialPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String \ntypeName, PrimitiveTypeKind spatialTypeKind) at lambda_method(Closure , Shaper ) Resolution: To include in your project for deployment purposes, \nuse nuget to get Microsoft.SqlServer.Types package. \n","html",[2239,8652,8653,8658,8670,8675,8680,8685,8690,8695],{"__ignoreMap":1080},[4215,8654,8655],{"class":4217,"line":4218},[4215,8656,8657],{"class":8259},"at System.Data.Entity.SqlServer.SqlTypesAssemblyLoader.GetSqlTypesAssembly() \n",[4215,8659,8660,8663,8667],{"class":4217,"line":1081},[4215,8661,8662],{"class":8259},"at System.Data.Entity.SqlServer.SqlSpatialDataReader.",[4215,8664,8666],{"class":8665},"s7hpK","\u003C",[4215,8668,8669],{"class":8259},".cctor>b__0() at System.Lazy`1.CreateValue() \n",[4215,8671,8672],{"class":4217,"line":1084},[4215,8673,8674],{"class":8259},"--- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Lazy`1.get_Value()\n",[4215,8676,8677],{"class":4217,"line":4234},[4215,8678,8679],{"class":8259},"at System.Data.Entity.SqlServer.SqlSpatialDataReader.GetGeography(Int32 ordinal) at\n",[4215,8681,8682],{"class":4217,"line":4240},[4215,8683,8684],{"class":8259},"System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) at\n",[4215,8686,8687],{"class":4217,"line":4246},[4215,8688,8689],{"class":8259},"System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetSpatialPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String \n",[4215,8691,8692],{"class":4217,"line":4252},[4215,8693,8694],{"class":8259},"typeName, PrimitiveTypeKind spatialTypeKind) at lambda_method(Closure , Shaper ) Resolution: To include in your project for deployment purposes, \n",[4215,8696,8697],{"class":4217,"line":4258},[4215,8698,8699],{"class":8259},"use nuget to get Microsoft.SqlServer.Types package.\n",[16,8701,8702],{},[156,8703],{"alt":1080,"src":8704},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-spatial-types-and-functions-are-not-avai_a814-sqlservertypenuget_2.jpg",[16,8706,8707],{},"After the package is installed, the following readme will give you details for both ASP.NET and Desktop applications.",[16,8709,8710],{},[156,8711],{"alt":1080,"src":8712},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-spatial-types-and-functions-are-not-avai_a814-actionrequired_2.jpg",[16,8714,8715],{},"To deploy an application that uses spatial data types to a machine that does not have 'System CLR Types\nfor SQL Server' installed you also need to deploy the native assembly SqlServerSpatial110.dll.Both x86 (32 bit) and x64 (64 bit) versions of this assembly have been added to your project under the SqlServerTypes\\x86 and SqlServerTypes\\x64 subdirectories.",[16,8717,8718],{},"The native assembly msvcr100.dll is also included  in case the C++runtime is not installed.  Adding the following to the Global.asax.cs Application_Start()",[2232,8720,8724],{"className":8721,"code":8722,"language":8723,"meta":1080,"style":1080},"language-csharp shiki shiki-themes github-light github-dark","SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath(\"~\u002Fbin\"));\n","csharp",[2239,8725,8726],{"__ignoreMap":1080},[4215,8727,8728],{"class":4217,"line":4218},[4215,8729,8722],{},[4682,8731,8732],{},"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 .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":1080,"searchDepth":1081,"depth":1081,"links":8734},[],"SQL Server GeoSpatial types","\u002Farticles\u002Fimages\u002Fwindows-live-writer-spatial-types-and-functions-are-not-avai_a814-sqlservertypenuget_thumb.jpg",{},"\u002Farticles\u002Fmicrosoft-sqlserver-types-getting-it-done",{"title":8624,"description":8735},"articles\u002Fmicrosoft-sqlserver-types-getting-it-done",[8742,8743],"mvc","sqlserver","1dmx9etHvwEb9Xf4khJPeF6FdCgWY2eXe5VWYxfvRO4",{"id":8746,"title":8747,"author":8,"body":8748,"createdAt":8519,"description":1915,"extension":1101,"img":8988,"meta":8989,"navigation":1104,"path":8990,"seo":8991,"stem":8992,"tags":8993,"updatedAt":8519,"__hash__":8995},"articles\u002Farticles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008.md","Starting jQuery and Get the downloads and patches(for Visual Studio.NET 2008)",{"type":10,"value":8749,"toc":8986},[8750,8761,8769,8983],[16,8751,8752,8753,8756,8757,8760],{},"1.) Download install VS.NET 2008 SP1 patch   Visual Studio 2008 SP1 has the following patch to allow IntelliSense with jQuery found\n",[1139,8754,8578],{"href":8755,"target":1142},"http:\u002F\u002Fcode.msdn.microsoft.com\u002FKB958502\u002FRelease\u002FProjectReleases.aspx?ReleaseId=1736",".  Note: this is a patch that is applied\nafter .NET 3.5 SP1 and Visual Studio 2008 SP1.  Information about this patch can be found\n",[1139,8758,8578],{"href":8759,"target":1142},"http:\u002F\u002Fblogs.msdn.com\u002Fwebdevtools\u002Farchive\u002F2008\u002F11\u002F07\u002Fhotfix-to-enable-vsdoc-js-intellisense-doc-files-is-now-available.aspx",".\nI did find that the vsdoc.js version must match the version of jquery in order for the intellisense to function correctly.  If the versions mismatch intellisense\nwill not work.",[16,8762,8763,8764,8768],{},"2.) ",[1139,8765,8767],{"href":8766,"target":1142},"http:\u002F\u002Fdocs.jquery.com\u002FDownloading_jQuery","Download"," jQuery documentation library  ",[13,8770,8771,8780,8786,8789,8911,8916,8977,8980],{},[16,8772,8773,8774,8776,8777],{},"3.) ",[1139,8775,8767],{"href":8766,"target":1142}," jQuery \n",[156,8778],{"alt":1080,"src":8779},"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_4a.png",[16,8781,8782,8783],{},"4.) Copy both 2 and 3 to your solution Scripts folder\n",[156,8784],{"alt":1080,"src":8785},"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_8.png",[16,8787,8788],{},"5.) In your aspx reference the jquery file",[2232,8790,8792],{"className":8240,"code":8791,"language":8242,"meta":1080,"style":1080},"\u003Cscript src=\"Scripts\u002Fjquery-1.2.6.min.js\" type=\"text\u002Fjavascript\">\u003C\u002Fscript>    or    \u003Casp:ScriptManager runat=\"server\" ID=\"scriptmanager1\">     \n    \u003CScripts>      \n        \u003Casp:ScriptReference Path=\"~\u002FScripts\u002Fjquery-1.2.6.min\" \u002F>      \n    \u003C\u002FScripts>      \n\u003C\u002Fasp:ScriptManager> \n",[2239,8793,8794,8854,8865,8889,8898],{"__ignoreMap":1080},[4215,8795,8796,8798,8802,8805,8808,8811,8814,8816,8819,8822,8824,8827,8829,8832,8835,8837,8840,8843,8845,8848,8851],{"class":4217,"line":4218},[4215,8797,8666],{"class":8259},[4215,8799,8801],{"class":8800},"s9eBZ","script",[4215,8803,8804],{"class":4666}," src",[4215,8806,8807],{"class":8265},"=",[4215,8809,8810],{"class":4669},"\"Scripts\u002Fjquery-1.2.6.min.js\"",[4215,8812,8813],{"class":4666}," type",[4215,8815,8807],{"class":8265},[4215,8817,8818],{"class":4669},"\"text\u002Fjavascript\"",[4215,8820,8821],{"class":8259},">\u003C\u002F",[4215,8823,8801],{"class":8800},[4215,8825,8826],{"class":8259},">    or    ",[4215,8828,8666],{"class":8265},[4215,8830,8831],{"class":4666},"asp",[4215,8833,8834],{"class":8259},":ScriptManager runat",[4215,8836,8807],{"class":8265},[4215,8838,8839],{"class":4669},"\"server\"",[4215,8841,8842],{"class":8255}," ID",[4215,8844,8807],{"class":8265},[4215,8846,8847],{"class":4669},"\"scriptmanager1\"",[4215,8849,8850],{"class":8265},">",[4215,8852,8853],{"class":8259},"     \n",[4215,8855,8856,8859,8862],{"class":4217,"line":1081},[4215,8857,8858],{"class":8259},"    \u003C",[4215,8860,8861],{"class":8255},"Scripts",[4215,8863,8864],{"class":8259},">      \n",[4215,8866,8867,8870,8872,8875,8878,8881,8883,8886],{"class":4217,"line":1084},[4215,8868,8869],{"class":8259},"        \u003C",[4215,8871,8831],{"class":8800},[4215,8873,8874],{"class":8259},":",[4215,8876,8877],{"class":8255},"ScriptReference",[4215,8879,8880],{"class":4666}," Path",[4215,8882,8807],{"class":8265},[4215,8884,8885],{"class":4669},"\"~\u002FScripts\u002Fjquery-1.2.6.min\"",[4215,8887,8888],{"class":8259}," \u002F>      \n",[4215,8890,8891,8894,8896],{"class":4217,"line":4234},[4215,8892,8893],{"class":8259},"    \u003C\u002F",[4215,8895,8861],{"class":8255},[4215,8897,8864],{"class":8259},[4215,8899,8900,8903,8905,8908],{"class":4217,"line":4240},[4215,8901,8902],{"class":8265},"\u003C\u002F",[4215,8904,8831],{"class":4666},[4215,8906,8907],{"class":8259},":ScriptManager",[4215,8909,8910],{"class":8265},">\n",[16,8912,8913],{},[19,8914,8915],{},"Some Quick Tips",[48,8917,8918,8921,8933,8939,8952,8958,8964],{},[51,8919,8920],{},"If you are using a master page the script reference only needs to exist in the master page",[51,8922,8923,8924,8926,8927,8929,8930,8932],{},"javascript intellisense will not work in user controls by default as\nthe user control doesn’t have a reference to the js file.  A work around (use the following at the top of the user control).  At runtime ASP.NET will\nnot render this tag however Visual Studio will evaluate the script and provide intellisense",[1118,8925],{},"\n\u003C% if (false) { %>",[1118,8928],{},"\n      \u003Cscript src=”..\u002FScripts\u002Fjquery-1.2.6.min.js” type=”text\u002Fjavascript”>",[1118,8931],{},"\n\u003C% } %>",[51,8934,8935,8936,8938],{},"a recommended method of including js files is to create one js file which entail will include references to any number of specific js files, then on your web page\ninclude a reference to this one single js file",[1118,8937],{},"\n\u003Creference path=”~\u002FScripts\u002Fjquery-1.2.6.min.js” \u002F>",[51,8940,8941,8942,8944,8947,8948,8951],{},"a good approach is to remove the version number from the jquery files to allow easier updates to these files in the future",[1118,8943],{},[19,8945,8946],{},"Path(s) for Script References","     * ",[19,8949,8950],{},"File-Relative Paths"," i.e. ..\u002F..\u002Ffile.js This type of path\nis relative to the currently loaded file.  Support - ASP.NET Web forms \u002F MVC",[51,8953,8954,8957],{},[19,8955,8956],{},"App-Relative Paths"," i.e. ~\u002Ffolder\u002Ffile.js  Is calculated\nfrom the base of your application.  ASP.NET Web forms supports this type of path however\nthe path must be within a scriptreference tag or select asp.net\ncontrols which have runat=”server”",[51,8959,8960,8963],{},[19,8961,8962],{},"Site-Relative Paths"," i.e. \u002Ffolder\u002Ffile.js  Is calculated from the base of your site.  Supported\nby ASP.NET Web forms \u002F MVC however is not supported by Visual Studio",[51,8965,8966,8969,8970,8973,8976],{},[19,8967,8968],{},"Absolute Paths"," i.e. ",[1139,8971],{"href":8972},"http:\u002F\u002Fsite\u002Ffolder\u002Ffile.js",[1139,8974,8972],{"href":8972,"rel":8975},[3695]," \nSupported by ASP.NET Web forms \u002F MVC and Visual Studio   If using Visual Studio(ASP.NET Web forms) recommended to use App-Relative paths ~\u002Ffolder\u002Ffile.js. ",[16,8978,8979],{},"If using MVC use file-relative paths.",[156,8981],{"src":8982,"alt":1080},"\u002Farticles\u002Fimages\u002Fjquery.jpg",[4682,8984,8985],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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":1080,"searchDepth":1081,"depth":1081,"links":8987},[],"\u002Farticles\u002Fimages\u002Fimage_thumb.png",{},"\u002Farticles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008",{"title":8747,"description":1915},"articles\u002Fstarting-jquery-and-get-the-downloads-and-patchesfor-visual-studio-net-2008",[8994,5166,8526],"aspnet","CaoqzxSPqdjjJIKDlApGzP7mizluXjytJfH68p7chaE",{"id":8997,"title":8998,"author":8,"body":8999,"createdAt":8519,"description":9193,"extension":1101,"img":9194,"meta":9195,"navigation":1104,"path":9196,"seo":9197,"stem":9198,"tags":9199,"updatedAt":8519,"__hash__":9201},"articles\u002Farticles\u002Fxamarin-android-platform-version-support.md","Xamarin Android - Platform Version Support",{"type":10,"value":9000,"toc":9191},[9001,9007,9015,9020,9023,9055,9058,9072,9079,9090,9128,9130,9149,9168,9173,9176,9181,9186,9189],[16,9002,9003,9004,9006],{},"So version support and Android is confusing.  Let’s just get the straight.",[1118,9005],{},"\nIn writing this post I have read things over multiple times.  Do not get discouraged.  Google generally gives three names to the API levels: an API number\u002Finteger, a version number, and a candy name.",[16,9008,9009,9010,9014],{},"This is documented on their\n",[1139,9011,9013],{"href":9012,"target":1142},"http:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fdashboards\u002Findex.html","platform dashboard",".  For example KitKat API 19, Version 4.4\n. While working with Xamarin Android, project properties show the following selections.  We have Compile using version, Minimum Android to target\nand Target Android version. Ugh.",[16,9016,9017],{},[156,9018],{"alt":1080,"src":9019},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_2.png",[16,9021,9022],{},"These values are pushed to the AndroidManifest.xml which is included in your project.",[2232,9024,9028],{"className":9025,"code":9026,"language":9027,"meta":1080,"style":1080},"language-xml shiki shiki-themes github-light github-dark","\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"DrawerLayout_V7_Tutorial.DrawerLayout_V7_Tutorial\">  \n    \u003Cuses-sdk android:minSdkVersion=\"19\" android:targetSdkVersion=\"19\" \u002F>  \n    \u003Capplication android:label=\"DrawerLayout_V7_Tutorial\">\u003C\u002Fapplication>  \n\u003C\u002Fmanifest>\n","xml",[2239,9029,9030,9035,9040,9045,9050],{"__ignoreMap":1080},[4215,9031,9032],{"class":4217,"line":4218},[4215,9033,9034],{},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n",[4215,9036,9037],{"class":4217,"line":1081},[4215,9038,9039],{},"\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"DrawerLayout_V7_Tutorial.DrawerLayout_V7_Tutorial\">  \n",[4215,9041,9042],{"class":4217,"line":1084},[4215,9043,9044],{},"    \u003Cuses-sdk android:minSdkVersion=\"19\" android:targetSdkVersion=\"19\" \u002F>  \n",[4215,9046,9047],{"class":4217,"line":4234},[4215,9048,9049],{},"    \u003Capplication android:label=\"DrawerLayout_V7_Tutorial\">\u003C\u002Fapplication>  \n",[4215,9051,9052],{"class":4217,"line":4240},[4215,9053,9054],{},"\u003C\u002Fmanifest>\n",[16,9056,9057],{},"While the latest versions of Android often provide great APIs for your app, you should\u002Fneed to continue to support older versions of Android until devices\nget updated.",[16,9059,9060,9061,9064,9065,9067,9068,1200],{},"The Android ",[1139,9062,9063],{"href":9012,"target":1142},"Platform Versions"," page\nhas details of version and respective codename\u002FAPI level.  Also of interest is the distribution % for each version.  At the time of this post,\ninterestingly KitKat version 4.4 (API 19) has the largest distribution.",[1118,9066],{},"\nIn order to use several recent platform API’s on an older version device\u002Fplatform Android\u002FXamarin provide what is called\n",[1139,9069,9071],{"href":9070,"target":1142},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Findex.html","support libraries",[16,9073,9074,9075,9078],{},"The Android Support Library package is a ",[19,9076,9077],{},"set of code libraries that provide backward-compatible versions of Android framework APIs","\nas well as features that are only available through the library APIs.  Each support library is backward-compatible to a specific Android API level.",[16,9080,9081,9082,9084,9085,9089],{},"This means that your application can use the libraries features and still be compatible with devices running older API levels.  These support libraries are included in your project and help your application run efficiently on older platforms.  Support Libraries each target a base Android API level and each provides a different set of features. In order to effectively use the libraries, it is important to consider what features you want to support and understand what features are\nsupported by each library at what Android API level.",[1118,9083],{},"\nBased on Android ",[1139,9086,9088],{"href":9087,"target":1142},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html","Support Library Features","  -",[16,9091,9092,9095,9101,9103,9109,9112,9114,9115,9118,9119,9121,9124],{},[1128,9093,9094],{},"In general, we recommend including the ",[1139,9096,9098],{"href":9097},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html#v4",[1128,9099,9100],{},"v4 support",[1128,9102,1158],{},[1139,9104,9106],{"href":9105},"https:\u002F\u002Fdeveloper.android.com\u002Ftools\u002Fsupport-library\u002Ffeatures.html#v7-appcompat",[1128,9107,9108],{},"v7 appcompat",[1128,9110,9111],{}," libraries, because they support a wide range of Android versions and provide APIs for recommended user interface patterns.",[1118,9113],{},"\nIn a recent blog post I am working with ActionBars and Toolbars.  I can ",[1139,9116,9117],{"href":9087,"target":1142},"see"," v7 appcompat library adds support for the ActionBar user interface design patter.  v7 appcompat also includes support for material design implementations.  Now looking at the Toolbar is implemented in API level 21 or higher.  I do want my code to run on KitKat (version 4.4) API level 19.  Toolbar minimum is API 21 which is version 5 (Lollipop).  So how do I setup my above minSdkVersion and targetSdkVersion?",[1118,9120],{},[19,9122,9123],{},"Compile using Android version: ",[9125,9126,9127],"u",{},"Set to the version that has all the features you need.",[9125,9129],{},[16,9131,9132,9134,9137,9138,9141,9142,9145,9148],{},[9125,9133],{},[19,9135,9136],{},"Minimum Android to Target – ","android:minSdkVersion : Specifies the minimum API Level on which the application is able to ",[19,9139,9140],{},"run",". The default value is \"1\".  Note: the Android system will prevent the user from installing the application if the system's API Level is lower than the value specified in this attribute.  ",[9125,9143,9144],{},"Set to the lowest version you want to support.\n",[19,9146,9147],{},"\nTarget Android version ","- android:targetSdkVersion :",[16,9150,9151,9152,9156,9157,9160,9164,9165],{},"To allow your app to take advantage of these changes and ensure that your app fits the\nstyle of each user's device, you should set the ",[1139,9153,9155],{"href":9154},"https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Ftopics\u002Fmanifest\u002Fuses-sdk-element.html#target","targetSdkVersion"," value to match the latest Android version available (If not set, the default value equals that given to minSdkVersion).  This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion).  This does get a little confusing but bottom line ",[1128,9158,9159],{},"To maintain your application along with each Android release, you should increase the value of this attribute to match the latest API level, then thoroughly test your application on the corresponding platform version.  ",[1139,9161,9163],{"href":9162,"target":1142},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F4568267\u002Fandroid-min-sdk-version-vs-target-sdk-version\u002F4994039#","Stack Overflow had a good definition",":  With this attribute set, the application says that it is able to run on older versions (down to minSdkVersion), but was explicitly tested to work with the version specified here. Specifying this target version allows the platform to disable compatibility settings that are not required for the target version (which may otherwise be turned on in order to maintain forward-compatibility) or enable newer features that are not available to older applications. This does not mean that you can program different features for different versions of the platform—it simply informs the platform that you have tested against the target version and the platform should not perform any extra work to maintain forward-compatibility with the target version. ",[9125,9166,9167],{},"Set to Use Compile using SDK version.",[16,9169,9170],{},[156,9171],{"alt":1080,"src":9172},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_4.png",[16,9174,9175],{},"Note: In Xamarin Studio the above choices appear slightly different.  Within XS, Project Options – General shows Target framework, then also Project Options – Android Application (2nd screenshot below)",[16,9177,9178],{},[156,9179],{"alt":1080,"src":9180},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_6.png",[16,9182,9183],{},[156,9184],{"alt":1080,"src":9185},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_8.png",[16,9187,9188],{},"Target framework: Compile using Android version\nMinimum Android version: is the same as Minimum Android to target\nTarget Android version:is the same as Target Android version",[4682,9190,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":9192},[],"Version support and Android is confusing.","\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-platform-version-suppo_db82-image_thumb.png",{},"\u002Farticles\u002Fxamarin-android-platform-version-support",{"title":8998,"description":9193},"articles\u002Fxamarin-android-platform-version-support",[9200],"xamarin","lGFnwKJcW4IOUUQJPuEloQRzzxk8T48RzHX_sw9r3kc",{"id":9203,"title":9204,"author":1915,"body":9205,"createdAt":9302,"description":9303,"extension":1101,"img":9223,"meta":9304,"navigation":1104,"path":9305,"seo":9306,"stem":9307,"tags":9308,"updatedAt":9302,"__hash__":9309},"articles\u002Farticles\u002Fazure-devops-file-transformation-pipeline.md","Azure DevOps File Transformation Pipeline",{"type":10,"value":9206,"toc":9300},[9207,9210,9216,9226,9229,9239,9242,9263,9266,9287],[16,9208,9209],{},"Running locally via Visual Studio and JetBrains Rider and managing the ASPNETCORE_ENVIRONMENT variable has been challenging.  Changing and setting ASPNETCORE_ENVIRONMENT within launchSettings.json and\u002For within Project Properties impacts the web.{envrionment}.config files.  Without the appropriate configuration within the publish steps the site was being deployed with incorrect settings and it was time consuming to track it back to the best approach.  So for now I have a pipeline build process setup for each AppService ‘slot’ setting different BuildConfiguration within each to ensure the most appropriate web.config is deployed.",[16,9211,9212,9213,9215],{},"This is a .net core asp.net web application so why the web.config? It appears that locally during IIS Express\u002FIIS there is still a dependency on this web.config to identify the hosting model (inprocess) and reference to the exe that would be run.  This is of course when deploying to Windows infrastructure.",[1118,9214],{},"\nProject Properties – Environment variables",[16,9217,9218],{},[1139,9219,9221],{"href":9220},"\u002Farticles\u002Fimages\u002Fimage_637262774405512580.png",[156,9222],{"style":1145,"title":158,"src":9223,"alt":158,"width":9224,"height":9225},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774407471496.png",457,345,[16,9227,9228],{},"My launchSettings.json – you can see I can modify before running how IIS or IIS Express identifies the environment variable",[16,9230,9231],{},[1139,9232,9234],{"href":9233},"\u002Farticles\u002Fimages\u002Fimage_637262774409386358.png",[156,9235],{"style":1145,"title":158,"src":9236,"alt":158,"width":9237,"height":9238},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774411646559.png",463,415,[16,9240,9241],{},"The resultant\u002Frelated web.configs looks like the following for Development and Staging environments.",[16,9243,9244,9245,9253,9255,9256],{},"web.config\n",[1139,9246,9248],{"href":9247},"\u002Farticles\u002Fimages\u002Fimage_637262774414383837.png",[156,9249],{"style":1145,"title":158,"src":9250,"alt":158,"width":9251,"height":9252},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774416208149.png",484,113,[1118,9254],{},"\nweb.Staging.config (you can see the addition of the xdt:Transform=”Replace” attribute which informs publish that when building for Staging to replace this variable within web.config with this value)\n",[1139,9257,9259],{"href":9258},"\u002Farticles\u002Fimages\u002Fimage_637262774419133421.png",[156,9260],{"style":1145,"title":158,"src":9261,"alt":158,"width":9251,"height":9262},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774421036401.png",117,[16,9264,9265],{},"By default the build process on Azure DevOps – Pipelines was ignoring any file transformation requirements.  In order to establish File Transformation on publish notice the –configuration $(BuildConfiguration)",[16,9267,9268,9276,9278,9279],{},[1139,9269,9271],{"href":9270},"\u002Farticles\u002Fimages\u002Fimage_637262774423325714.png",[156,9272],{"style":1145,"title":158,"src":9273,"alt":158,"width":9274,"height":9275},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774425301819.png",661,295,[1118,9277],{},"\nand the respective variable that is used during publish to identify the appropriate configuration to use (development\u002Fstaging etc.)\n",[1139,9280,9282],{"href":9281},"\u002Farticles\u002Fimages\u002Fimage_637262774427383207.png",[156,9283],{"style":1145,"title":158,"src":9284,"alt":158,"width":9285,"height":9286},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774428896829.png",702,164,[16,9288,9289,9290,9292],{},"After the build and using App Service Editor my web.config was successfully transformed",[1118,9291],{},[1139,9293,9295],{"href":9294},"\u002Farticles\u002Fimages\u002Fimage_637262774431201007.png",[156,9296],{"style":1145,"title":158,"src":9297,"alt":158,"width":9298,"height":9299},"\u002Farticles\u002Fimages\u002Fimage_thumb_637262774433117797.png",700,190,{"title":1080,"searchDepth":1081,"depth":1081,"links":9301},[],"2020-05-28T15:44:03.462Z","Azure DevOps. Build Pipelines and establishing build configurations when deploying to a Windows environment.  The following is quick documentation walking through the process to ensure appropriate web.config files and transforms are performing during the publish steps within your pipeline.  This is one approach used, while I believe there are still other alternatives available.",{},"\u002Farticles\u002Fazure-devops-file-transformation-pipeline",{"title":9204,"description":9303},"articles\u002Fazure-devops-file-transformation-pipeline",[5087],"lk4UjX3qvCsYs7rdaocW7xYDRc5SC2dkZpoMWRp45C4",{"id":9311,"title":9312,"author":1915,"body":9313,"createdAt":9800,"description":9801,"extension":1101,"img":9331,"meta":9802,"navigation":1104,"path":9803,"seo":9804,"stem":9805,"tags":9806,"updatedAt":9800,"__hash__":9807},"articles\u002Farticles\u002Fpath-to-resources-javascript-images-etc-not-found-with-vuejs-build.md","Path to Resources (JavaScript, Images etc.) Not Found with Vue.js Build",{"type":10,"value":9314,"toc":9798},[9315,9321,9324,9334,9337,9745,9754,9764,9773,9779,9792,9795],[16,9316,9317,9318,9320],{},"Using @vue\u002Fcli 4.3.1",[1118,9319],{},"\nWith minimal changes to code\u002Fsolution I found that resources (path to files) was not found after performing npm run build.  I was hoping to just run the newly built web application in the client side browser from File Explorer.  I ran the page and saw an empty screen.  So what was the issue and resolution?",[16,9322,9323],{},"The issue (visible within the screen capture – white screen and ERR_FILE_NOT_FOUND error message from the Chrome Debugger – Network Tools)",[16,9325,9326],{},[1139,9327,9329],{"href":9328},"\u002Farticles\u002Fimages\u002Fimage_637255046941289166.png",[156,9330],{"style":1145,"title":158,"src":9331,"alt":158,"width":9332,"height":9333},"\u002Farticles\u002Fimages\u002Fimage_thumb_637255046943290619.png",1124,286,[16,9335,9336],{},"Doing a view source the problem started to surface.  You can see below the path was relative to the root directory.  While running from File Explorer this must be relative path.",[2232,9338,9340],{"className":8648,"code":9339,"language":8650,"meta":1080,"style":1080},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n    \u003Chead>\n        \u003Cmeta charset=\"utf-8\">\n        \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n        \u003Clink rel=\"icon\" href=\"\u002Ffavicon.ico\">\u003Ctitle>Cargo\u003C\u002Ftitle>\n        \u003Clink href=\"\u002Fjs\u002Fcargo.js\" rel=\"preload\" as=\"script\">\n        \u003Clink href=\"\u002Fjs\u002Fchunk-common\u003C\u002Fstrong>.js\" rel=\"preload\" as=\"script\">\n        \u003Clink href=\"\u002Fjs\u002Fchunk-vendors.js\" rel=\"preload\" as=\"script\">\n    \u003C\u002Fhead>\n    \u003Cbody>\n        \u003Cnoscript>\n        \u003Cstrong>We're sorry but Cargo doesn't work properly \n        without JavaScript enabled. \n        Please enable it to continue.\u003C\u002Fstrong>\n        \u003C\u002Fnoscript>\n        \u003Cdiv id=\"app\">\u003C\u002Fdiv>\n        \u003C!-- built files will be auto injected -->\n        \u003Cscript type=\"text\u002Fjavascript\" src=\"\u002Fjs\u002Fchunk-vendors.js\">\u003C\u002Fscript>\n        \u003Cscript type=\"text\u002Fjavascript\" src=\"\u002Fjs\u002Fchunk-common.js\">\u003C\u002Fscript>\n        \u003Cscript type=\"text\u002Fjavascript\" src=\"\u002Fjs\u002Fcargo.js\">\u003C\u002Fscript>\n    \u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[2239,9341,9342,9355,9371,9381,9399,9423,9446,9482,9512,9544,9571,9580,9589,9598,9607,9612,9621,9630,9651,9656,9680,9705,9729,9737],{"__ignoreMap":1080},[4215,9343,9344,9347,9350,9353],{"class":4217,"line":4218},[4215,9345,9346],{"class":8259},"\u003C!",[4215,9348,9349],{"class":8800},"DOCTYPE",[4215,9351,9352],{"class":4666}," html",[4215,9354,8910],{"class":8259},[4215,9356,9357,9359,9361,9364,9366,9369],{"class":4217,"line":1081},[4215,9358,8666],{"class":8259},[4215,9360,8650],{"class":8800},[4215,9362,9363],{"class":4666}," lang",[4215,9365,8807],{"class":8259},[4215,9367,9368],{"class":4669},"\"en\"",[4215,9370,8910],{"class":8259},[4215,9372,9373,9376,9379],{"class":4217,"line":1084},[4215,9374,9375],{"class":8259},"    \u003C",[4215,9377,9378],{"class":8800},"head",[4215,9380,8910],{"class":8259},[4215,9382,9383,9386,9389,9392,9394,9397],{"class":4217,"line":4234},[4215,9384,9385],{"class":8259},"        \u003C",[4215,9387,9388],{"class":8800},"meta",[4215,9390,9391],{"class":4666}," charset",[4215,9393,8807],{"class":8259},[4215,9395,9396],{"class":4669},"\"utf-8\"",[4215,9398,8910],{"class":8259},[4215,9400,9401,9403,9405,9408,9410,9413,9416,9418,9421],{"class":4217,"line":4240},[4215,9402,9385],{"class":8259},[4215,9404,9388],{"class":8800},[4215,9406,9407],{"class":4666}," http-equiv",[4215,9409,8807],{"class":8259},[4215,9411,9412],{"class":4669},"\"X-UA-Compatible\"",[4215,9414,9415],{"class":4666}," content",[4215,9417,8807],{"class":8259},[4215,9419,9420],{"class":4669},"\"IE=edge\"",[4215,9422,8910],{"class":8259},[4215,9424,9425,9427,9429,9432,9434,9437,9439,9441,9444],{"class":4217,"line":4246},[4215,9426,9385],{"class":8259},[4215,9428,9388],{"class":8800},[4215,9430,9431],{"class":4666}," name",[4215,9433,8807],{"class":8259},[4215,9435,9436],{"class":4669},"\"viewport\"",[4215,9438,9415],{"class":4666},[4215,9440,8807],{"class":8259},[4215,9442,9443],{"class":4669},"\"width=device-width,initial-scale=1.0\"",[4215,9445,8910],{"class":8259},[4215,9447,9448,9450,9453,9456,9458,9461,9464,9466,9469,9472,9475,9478,9480],{"class":4217,"line":4252},[4215,9449,9385],{"class":8259},[4215,9451,9452],{"class":8800},"link",[4215,9454,9455],{"class":4666}," rel",[4215,9457,8807],{"class":8259},[4215,9459,9460],{"class":4669},"\"icon\"",[4215,9462,9463],{"class":4666}," href",[4215,9465,8807],{"class":8259},[4215,9467,9468],{"class":4669},"\"\u002Ffavicon.ico\"",[4215,9470,9471],{"class":8259},">\u003C",[4215,9473,9474],{"class":8800},"title",[4215,9476,9477],{"class":8259},">Cargo\u003C\u002F",[4215,9479,9474],{"class":8800},[4215,9481,8910],{"class":8259},[4215,9483,9484,9486,9488,9490,9492,9495,9497,9499,9502,9505,9507,9510],{"class":4217,"line":4258},[4215,9485,9385],{"class":8259},[4215,9487,9452],{"class":8800},[4215,9489,9463],{"class":4666},[4215,9491,8807],{"class":8259},[4215,9493,9494],{"class":4669},"\"\u002Fjs\u002Fcargo.js\"",[4215,9496,9455],{"class":4666},[4215,9498,8807],{"class":8259},[4215,9500,9501],{"class":4669},"\"preload\"",[4215,9503,9504],{"class":4666}," as",[4215,9506,8807],{"class":8259},[4215,9508,9509],{"class":4669},"\"script\"",[4215,9511,8910],{"class":8259},[4215,9513,9514,9516,9518,9520,9522,9525,9527,9530,9532,9534,9536,9538,9540,9542],{"class":4217,"line":4264},[4215,9515,9385],{"class":8259},[4215,9517,9452],{"class":8800},[4215,9519,9463],{"class":4666},[4215,9521,8807],{"class":8259},[4215,9523,9524],{"class":4669},"\"\u002Fjs\u002Fchunk-common",[4215,9526,8666],{"class":8665},[4215,9528,9529],{"class":4669},"\u002Fstrong>.js\"",[4215,9531,9455],{"class":4666},[4215,9533,8807],{"class":8259},[4215,9535,9501],{"class":4669},[4215,9537,9504],{"class":4666},[4215,9539,8807],{"class":8259},[4215,9541,9509],{"class":4669},[4215,9543,8910],{"class":8259},[4215,9545,9546,9548,9550,9552,9554,9557,9559,9561,9563,9565,9567,9569],{"class":4217,"line":4270},[4215,9547,9385],{"class":8259},[4215,9549,9452],{"class":8800},[4215,9551,9463],{"class":4666},[4215,9553,8807],{"class":8259},[4215,9555,9556],{"class":4669},"\"\u002Fjs\u002Fchunk-vendors.js\"",[4215,9558,9455],{"class":4666},[4215,9560,8807],{"class":8259},[4215,9562,9501],{"class":4669},[4215,9564,9504],{"class":4666},[4215,9566,8807],{"class":8259},[4215,9568,9509],{"class":4669},[4215,9570,8910],{"class":8259},[4215,9572,9573,9576,9578],{"class":4217,"line":4276},[4215,9574,9575],{"class":8259},"    \u003C\u002F",[4215,9577,9378],{"class":8800},[4215,9579,8910],{"class":8259},[4215,9581,9582,9584,9587],{"class":4217,"line":4282},[4215,9583,9375],{"class":8259},[4215,9585,9586],{"class":8800},"body",[4215,9588,8910],{"class":8259},[4215,9590,9591,9593,9596],{"class":4217,"line":4288},[4215,9592,9385],{"class":8259},[4215,9594,9595],{"class":8800},"noscript",[4215,9597,8910],{"class":8259},[4215,9599,9600,9602,9604],{"class":4217,"line":4294},[4215,9601,9385],{"class":8259},[4215,9603,19],{"class":8800},[4215,9605,9606],{"class":8259},">We're sorry but Cargo doesn't work properly \n",[4215,9608,9609],{"class":4217,"line":4300},[4215,9610,9611],{"class":8259},"        without JavaScript enabled. \n",[4215,9613,9614,9617,9619],{"class":4217,"line":4306},[4215,9615,9616],{"class":8259},"        Please enable it to continue.\u003C\u002F",[4215,9618,19],{"class":8800},[4215,9620,8910],{"class":8259},[4215,9622,9623,9626,9628],{"class":4217,"line":4312},[4215,9624,9625],{"class":8259},"        \u003C\u002F",[4215,9627,9595],{"class":8800},[4215,9629,8910],{"class":8259},[4215,9631,9632,9634,9637,9640,9642,9645,9647,9649],{"class":4217,"line":4318},[4215,9633,9385],{"class":8259},[4215,9635,9636],{"class":8800},"div",[4215,9638,9639],{"class":4666}," id",[4215,9641,8807],{"class":8259},[4215,9643,9644],{"class":4669},"\"app\"",[4215,9646,8821],{"class":8259},[4215,9648,9636],{"class":8800},[4215,9650,8910],{"class":8259},[4215,9652,9653],{"class":4217,"line":4324},[4215,9654,9655],{"class":8249},"        \u003C!-- built files will be auto injected -->\n",[4215,9657,9658,9660,9662,9664,9666,9668,9670,9672,9674,9676,9678],{"class":4217,"line":4330},[4215,9659,9385],{"class":8259},[4215,9661,8801],{"class":8800},[4215,9663,8813],{"class":4666},[4215,9665,8807],{"class":8259},[4215,9667,8818],{"class":4669},[4215,9669,8804],{"class":4666},[4215,9671,8807],{"class":8259},[4215,9673,9556],{"class":4669},[4215,9675,8821],{"class":8259},[4215,9677,8801],{"class":8800},[4215,9679,8910],{"class":8259},[4215,9681,9682,9684,9686,9688,9690,9692,9694,9696,9699,9701,9703],{"class":4217,"line":4336},[4215,9683,9385],{"class":8259},[4215,9685,8801],{"class":8800},[4215,9687,8813],{"class":4666},[4215,9689,8807],{"class":8259},[4215,9691,8818],{"class":4669},[4215,9693,8804],{"class":4666},[4215,9695,8807],{"class":8259},[4215,9697,9698],{"class":4669},"\"\u002Fjs\u002Fchunk-common.js\"",[4215,9700,8821],{"class":8259},[4215,9702,8801],{"class":8800},[4215,9704,8910],{"class":8259},[4215,9706,9707,9709,9711,9713,9715,9717,9719,9721,9723,9725,9727],{"class":4217,"line":4342},[4215,9708,9385],{"class":8259},[4215,9710,8801],{"class":8800},[4215,9712,8813],{"class":4666},[4215,9714,8807],{"class":8259},[4215,9716,8818],{"class":4669},[4215,9718,8804],{"class":4666},[4215,9720,8807],{"class":8259},[4215,9722,9494],{"class":4669},[4215,9724,8821],{"class":8259},[4215,9726,8801],{"class":8800},[4215,9728,8910],{"class":8259},[4215,9730,9731,9733,9735],{"class":4217,"line":4348},[4215,9732,9575],{"class":8259},[4215,9734,9586],{"class":8800},[4215,9736,8910],{"class":8259},[4215,9738,9739,9741,9743],{"class":4217,"line":4353},[4215,9740,8902],{"class":8259},[4215,9742,8650],{"class":8800},[4215,9744,8910],{"class":8259},[16,9746,1959,9747,9750,9751],{},[19,9748,9749],{},"resolution"," while difficult to find, was easy to implement.  Opening up my vue.config.js I simply referenced the publicPath with a vlaue of  ",[19,9752,9753],{},"publicPath: '.\u002F'",[16,9755,9756],{},[1139,9757,9759],{"href":9758},"\u002Farticles\u002Fimages\u002Fimage_637255046945239780.png",[156,9760],{"style":1145,"title":158,"src":9761,"alt":158,"width":9762,"height":9763},"\u002Farticles\u002Fimages\u002Fimage_thumb_637255046947319889.png",567,375,[16,9765,9766,9767,9772],{},"Finding the ",[1139,9768,9771],{"href":9769,"target":1142,"rel":9770},"https:\u002F\u002Fcli.vuejs.org\u002Fconfig\u002F#vue-config-js",[6921],"documentation",", the default value is ‘\u002F’ which is what I was finding. ",[16,9774,9775,9776],{},"The base URL your application bundle will be deployed at (known as baseUrl before Vue CLI 3.3). ",[19,9777,9778],{},"This is the equivalent of webpack's output.publicPath, but Vue CLI also needs this value for other purposes, so you should always use publicPath instead of modifying webpack output.publicPath.",[16,9780,9781,9782,9786,9787,9791],{},"By default, Vue CLI assumes your app will be deployed at the root of a domain, e.g. ",[1139,9783,9784],{"href":9784,"rel":9785},"https:\u002F\u002Fwww.my-app.com\u002F",[3695],". If your app is deployed at a sub-path, you will need to specify that sub-path using this option. For example, if your app is deployed at ",[1139,9788,9789],{"href":9789,"rel":9790},"https:\u002F\u002Fwww.foobar.com\u002Fmy-app\u002F",[3695],", set publicPath to '\u002Fmy-app\u002F'.",[16,9793,9794],{},"The value can also be set to an empty string ('') or a relative path (.\u002F) so that all assets are linked using relative paths. This allows the built bundle to be deployed under any public path, or used in a file system based environment like a Cordova hybrid app.",[4682,9796,9797],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .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":1080,"searchDepth":1081,"depth":1081,"links":9799},[],"2020-05-19T17:04:54.881Z","Resources not found with vue cli build",{},"\u002Farticles\u002Fpath-to-resources-javascript-images-etc-not-found-with-vuejs-build",{"title":9312,"description":9801},"articles\u002Fpath-to-resources-javascript-images-etc-not-found-with-vuejs-build",[8356],"ccEvdVv8lVqOsfxnu_npwblWarxJcuJEuUnc3xPa8Zk",{"id":9809,"title":9810,"author":1915,"body":9811,"createdAt":9976,"description":9977,"extension":1101,"img":9978,"meta":9979,"navigation":1104,"path":9980,"seo":9981,"stem":9982,"tags":9983,"updatedAt":9976,"__hash__":9984},"articles\u002Farticles\u002Fvue-cli-creating-a-project-issue-with-hot-reload.md","Vue CLI Creating a Project Issue with Hot Reload",{"type":10,"value":9812,"toc":9974},[9813,9821,9832,9888,9891,9898,9948,9956,9971],[16,9814,9815,9816,9820],{},"I noticed today after creating a new vue project via “vue create new-app” that hot reload was not working while modifying html within App.vue.\nHow can this be, it is brand new app on the latest bits.\nFollowing the instructions on ",[1139,9817,9819],{"href":9818,"target":1142},"https:\u002F\u002Fcli.vuejs.org\u002Fguide\u002Fcreating-a-project.html","cli.vuejs.org","\nit states that vue-clie-service starts webpack-dev-server out of the box ”",[16,9822,1959,9823,9826,9827,9831],{},[2239,9824,9825],{},"vue-cli-service serve"," command starts a dev server\n(based on ",[1139,9828,9830],{"href":9829},"https:\u002F\u002Fgithub.com\u002Fwebpack\u002Fwebpack-dev-server","webpack-dev-server",") that\ncomes with Hot-Module-Replacement (HMR) working out of the box.”  Why. Brand new project, with the latest bits and it still\ndid not work.   I found 2 solutions. The first fix was for me, was to add a vue.config.js\nfile to the root directory (alongside the package.json) and add the following devServer property",[2232,9833,9835],{"className":8240,"code":9834,"language":8242,"meta":1080,"style":1080},"devServer: {          \n    useLocalIp: false,   \n        proxy: 'http:\u002F\u002Flocalhost:8080',   \n        public: '172.23.3.180:8080'       \n}\n",[2239,9836,9837,9845,9858,9870,9883],{"__ignoreMap":1080},[4215,9838,9839,9842],{"class":4217,"line":4218},[4215,9840,9841],{"class":4666},"devServer",[4215,9843,9844],{"class":8259},": {          \n",[4215,9846,9847,9850,9852,9855],{"class":4217,"line":1081},[4215,9848,9849],{"class":4666},"    useLocalIp",[4215,9851,3087],{"class":8259},[4215,9853,9854],{"class":8255},"false",[4215,9856,9857],{"class":8259},",   \n",[4215,9859,9860,9863,9865,9868],{"class":4217,"line":1084},[4215,9861,9862],{"class":4666},"        proxy",[4215,9864,3087],{"class":8259},[4215,9866,9867],{"class":4669},"'http:\u002F\u002Flocalhost:8080'",[4215,9869,9857],{"class":8259},[4215,9871,9872,9875,9877,9880],{"class":4217,"line":4234},[4215,9873,9874],{"class":4666},"        public",[4215,9876,3087],{"class":8259},[4215,9878,9879],{"class":4669},"'172.23.3.180:8080'",[4215,9881,9882],{"class":8259},"       \n",[4215,9884,9885],{"class":4217,"line":4240},[4215,9886,9887],{"class":8259},"}\n",[16,9889,9890],{},"Note: the public ip address that I used here was from “IPv4 Address” after performing ipconfig in a command prompt. So documenting here will help me find\u002Fresolve this next week when this comes up again. But why, and why was it so difficult to find this resolution?",[16,9892,9893,9894,9897],{},"The second solution which ",[19,9895,9896],{},"I liked better ","(and seems faster) was as-follows. Again, a modification to the vue.config.js and also adding a new ‘script’ to package.json",[2232,9899,9901],{"className":8240,"code":9900,"language":8242,"meta":1080,"style":1080},"configureWebpack: {\n   devServer: {\n      watchOptions: {\n         poll: true\n      }\n   }\n}\n",[2239,9902,9903,9911,9918,9925,9935,9939,9944],{"__ignoreMap":1080},[4215,9904,9905,9908],{"class":4217,"line":4218},[4215,9906,9907],{"class":4666},"configureWebpack",[4215,9909,9910],{"class":8259},": {\n",[4215,9912,9913,9916],{"class":4217,"line":1081},[4215,9914,9915],{"class":4666},"   devServer",[4215,9917,9910],{"class":8259},[4215,9919,9920,9923],{"class":4217,"line":1084},[4215,9921,9922],{"class":4666},"      watchOptions",[4215,9924,9910],{"class":8259},[4215,9926,9927,9930,9932],{"class":4217,"line":4234},[4215,9928,9929],{"class":4666},"         poll",[4215,9931,3087],{"class":8259},[4215,9933,9934],{"class":8255},"true\n",[4215,9936,9937],{"class":4217,"line":4240},[4215,9938,5328],{"class":8259},[4215,9940,9941],{"class":4217,"line":4246},[4215,9942,9943],{"class":8259},"   }\n",[4215,9945,9946],{"class":4217,"line":4252},[4215,9947,9887],{"class":8259},[16,9949,9950,9951,9955],{},"The script within package.json. Here you can see I am setting environment NODE_ENV to development using the ",[1139,9952,9954],{"href":9953,"target":1142},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fcross-env#installation","cross-env"," npm package (I had to install via npm installl –save-dev cross-env)",[2232,9957,9959],{"className":8240,"code":9958,"language":8242,"meta":1080,"style":1080},"\"dev\": \"cross-env NODE_ENV=development vue-cli-service serve --open --host localhost\"\n",[2239,9960,9961],{"__ignoreMap":1080},[4215,9962,9963,9966,9968],{"class":4217,"line":4218},[4215,9964,9965],{"class":4669},"\"dev\"",[4215,9967,3087],{"class":8259},[4215,9969,9970],{"class":4669},"\"cross-env NODE_ENV=development vue-cli-service serve --open --host localhost\"\n",[4682,9972,9973],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":9975},[],"2020-05-18T21:44:23.866Z","Hot module reload issues with project created with vue cli","\u002Farticles\u002Fimages\u002Fvuecli.png",{},"\u002Farticles\u002Fvue-cli-creating-a-project-issue-with-hot-reload",{"title":9810,"description":9977},"articles\u002Fvue-cli-creating-a-project-issue-with-hot-reload",[8356],"stNfxxuWXTHpzSMOXcF6aqRaYHGsRiH2IzJU3A56aUM",{"id":9986,"title":9987,"author":1915,"body":9988,"createdAt":10185,"description":9992,"extension":1101,"img":10186,"meta":10187,"navigation":1104,"path":10188,"seo":10189,"stem":10190,"tags":10191,"updatedAt":10185,"__hash__":10192},"articles\u002Farticles\u002Fwindowscryptographicexception-the-system-cannot-find-the-file-specified.md","WindowsCryptographicException The system cannot find the file specified.",{"type":10,"value":9989,"toc":10183},[9990,9993,9996,10018,10021,10035,10180],[16,9991,9992],{},"Azure – while trying to read pfx (certificate) from disk I came across a number of issues, but thought this might help some out.",[16,9994,9995],{},"The fix was adding the final parameter X509KeyStorageFlags",[2232,9997,10001],{"className":9998,"code":9999,"language":10000,"meta":1080,"style":1080},"language-cs shiki shiki-themes github-light github-dark","var cert = new X509Certificate2(\n    $\"{Environment.ContentRootPath}\u002FApp_Data\u002Fmycert.pfx\",\"{password}\",\n    X509KeyStorageFlags.MachineKeySet); \n","cs",[2239,10002,10003,10008,10013],{"__ignoreMap":1080},[4215,10004,10005],{"class":4217,"line":4218},[4215,10006,10007],{},"var cert = new X509Certificate2(\n",[4215,10009,10010],{"class":4217,"line":1081},[4215,10011,10012],{},"    $\"{Environment.ContentRootPath}\u002FApp_Data\u002Fmycert.pfx\",\"{password}\",\n",[4215,10014,10015],{"class":4217,"line":1084},[4215,10016,10017],{},"    X509KeyStorageFlags.MachineKeySet);\n",[16,10019,10020],{},"Other references:",[16,10022,10023,10026,10029,10032],{},[1139,10024],{"href":10025},"https:\u002F\u002Fsupport.microsoft.com\u002Fen-us\u002Fhelp\u002F950090\u002Finstalling-a-pfx-file-using-x509certificate-from-a-standard-net-applic",[1139,10027,10025],{"href":10025,"rel":10028},[3695],[1139,10030],{"href":10031},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F52750160\u002Fwhat-is-the-rationale-for-all-the-different-x509keystorageflags",[1139,10033,10031],{"href":10031,"rel":10034},[3695],[2232,10036,10038],{"className":8648,"code":10037,"language":8650,"meta":1080,"style":1080},"An unhandled exception occurred while processing the request.\nWindowsCryptographicException: The system cannot find the file specified. System.Security.Cryptography.CngKey.Open(string keyName, CngProvider provider, CngKeyOpenOptions openOptions)  \nException: An error was encountered while handling the remote login. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler\u003CTOptions>.HandleRequestAsync()  \nStack Query Cookies Headers Routing \nWindowsCryptographicException: The system cannot find the file specified. System.Security.Cryptography.CngKey.Open(string keyName, \n    CngProvider provider, CngKeyOpenOptions openOptions) \nSystem.Security.Cryptography.CngKey.Open(string keyName, CngProvider provider) \nInternal.Cryptography.Pal.CertificatePal.GetPrivateKey\u003CT>(Func\u003CCspParameters, T> createCsp, Func\u003CCngKey, T> createCng) \nInternal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey() \nSystem.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() \nMicrosoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey() \nMicrosoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKeyStatus() \nMicrosoft.IdentityModel.Tokens.AsymmetricSignatureProvider.FoundPrivateKey(SecurityKey key) \nMicrosoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, string algorithm, bool willCreateSignatures) \nMicrosoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, string algorithm, bool willCreateSignatures, \n        CryptoProviderFactory cryptoProviderFactory) \nMicrosoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, string algorithm, bool willCreateSignatures) \nMicrosoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, string algorithm)  Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(string input, SigningCredentials signingCredentials) System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)  Sample.Idp.Startup+\u003C>c__DisplayClass7_0.\u003CConfigureServices>b__8(AuthorizationCodeReceivedContext context) in Startup.cs\nMicrosoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectEvents.AuthorizationCodeReceived(AuthorizationCodeReceivedContext context) Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RunAuthorizationCodeReceivedEventAsync(OpenIdConnectMessage authorizationResponse, ClaimsPrincipal user, AuthenticationProperties properties, JwtSecurityToken jwt) \nMicrosoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync() \n",[2239,10039,10040,10045,10050,10061,10066,10071,10076,10081,10109,10114,10119,10124,10129,10134,10139,10144,10149,10154,10170,10175],{"__ignoreMap":1080},[4215,10041,10042],{"class":4217,"line":4218},[4215,10043,10044],{"class":8259},"An unhandled exception occurred while processing the request.\n",[4215,10046,10047],{"class":4217,"line":1081},[4215,10048,10049],{"class":8259},"WindowsCryptographicException: The system cannot find the file specified. System.Security.Cryptography.CngKey.Open(string keyName, CngProvider provider, CngKeyOpenOptions openOptions)  \n",[4215,10051,10052,10055,10058],{"class":4217,"line":1084},[4215,10053,10054],{"class":8259},"Exception: An error was encountered while handling the remote login. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler\u003C",[4215,10056,10057],{"class":8665},"TOptions",[4215,10059,10060],{"class":8259},">.HandleRequestAsync()  \n",[4215,10062,10063],{"class":4217,"line":4234},[4215,10064,10065],{"class":8259},"Stack Query Cookies Headers Routing \n",[4215,10067,10068],{"class":4217,"line":4240},[4215,10069,10070],{"class":8259},"WindowsCryptographicException: The system cannot find the file specified. System.Security.Cryptography.CngKey.Open(string keyName, \n",[4215,10072,10073],{"class":4217,"line":4246},[4215,10074,10075],{"class":8259},"    CngProvider provider, CngKeyOpenOptions openOptions) \n",[4215,10077,10078],{"class":4217,"line":4252},[4215,10079,10080],{"class":8259},"System.Security.Cryptography.CngKey.Open(string keyName, CngProvider provider) \n",[4215,10082,10083,10086,10089,10092,10095,10098,10101,10104,10106],{"class":4217,"line":4258},[4215,10084,10085],{"class":8259},"Internal.Cryptography.Pal.CertificatePal.GetPrivateKey\u003C",[4215,10087,10088],{"class":8665},"T",[4215,10090,10091],{"class":8259},">(Func\u003C",[4215,10093,10094],{"class":8665},"CspParameters,",[4215,10096,10097],{"class":4666}," T",[4215,10099,10100],{"class":8259},"> createCsp, Func\u003C",[4215,10102,10103],{"class":8665},"CngKey,",[4215,10105,10097],{"class":4666},[4215,10107,10108],{"class":8259},"> createCng) \n",[4215,10110,10111],{"class":4217,"line":4264},[4215,10112,10113],{"class":8259},"Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey() \n",[4215,10115,10116],{"class":4217,"line":4270},[4215,10117,10118],{"class":8259},"System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() \n",[4215,10120,10121],{"class":4217,"line":4276},[4215,10122,10123],{"class":8259},"Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey() \n",[4215,10125,10126],{"class":4217,"line":4282},[4215,10127,10128],{"class":8259},"Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKeyStatus() \n",[4215,10130,10131],{"class":4217,"line":4288},[4215,10132,10133],{"class":8259},"Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.FoundPrivateKey(SecurityKey key) \n",[4215,10135,10136],{"class":4217,"line":4294},[4215,10137,10138],{"class":8259},"Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, string algorithm, bool willCreateSignatures) \n",[4215,10140,10141],{"class":4217,"line":4300},[4215,10142,10143],{"class":8259},"Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, string algorithm, bool willCreateSignatures, \n",[4215,10145,10146],{"class":4217,"line":4306},[4215,10147,10148],{"class":8259},"        CryptoProviderFactory cryptoProviderFactory) \n",[4215,10150,10151],{"class":4217,"line":4312},[4215,10152,10153],{"class":8259},"Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, string algorithm, bool willCreateSignatures) \n",[4215,10155,10156,10159,10161,10164,10167],{"class":4217,"line":4318},[4215,10157,10158],{"class":8259},"Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, string algorithm)  Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(string input, SigningCredentials signingCredentials) System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)  Sample.Idp.Startup+",[4215,10160,8666],{"class":8665},[4215,10162,10163],{"class":8259},">c__DisplayClass7_0.\u003C",[4215,10165,10166],{"class":8665},"ConfigureServices",[4215,10168,10169],{"class":8259},">b__8(AuthorizationCodeReceivedContext context) in Startup.cs\n",[4215,10171,10172],{"class":4217,"line":4324},[4215,10173,10174],{"class":8259},"Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectEvents.AuthorizationCodeReceived(AuthorizationCodeReceivedContext context) Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RunAuthorizationCodeReceivedEventAsync(OpenIdConnectMessage authorizationResponse, ClaimsPrincipal user, AuthenticationProperties properties, JwtSecurityToken jwt) \n",[4215,10176,10177],{"class":4217,"line":4330},[4215,10178,10179],{"class":8259},"Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()\n",[4682,10181,10182],{},"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);}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":1080,"searchDepth":1081,"depth":1081,"links":10184},[],"2020-05-08T18:24:50.164Z","\u002Farticles\u002Fimages\u002Fimage_thumb_637245590899400228.png",{},"\u002Farticles\u002Fwindowscryptographicexception-the-system-cannot-find-the-file-specified",{"title":9987,"description":9992},"articles\u002Fwindowscryptographicexception-the-system-cannot-find-the-file-specified",[5087,5166],"gbbOXSewTUn-I9zN11i80mm77-02qjY2Sj3AUb7gbjM",{"id":10194,"title":10195,"author":1915,"body":10196,"createdAt":10305,"description":10306,"extension":1101,"img":1915,"meta":10307,"navigation":1104,"path":10308,"seo":10309,"stem":10310,"tags":10311,"updatedAt":10305,"__hash__":10313},"articles\u002Farticles\u002Fsynchronous-operations-are-disallowed-call-readasync-or-set-allowsynchronousio-to-true-instead.md","Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.",{"type":10,"value":10197,"toc":10303},[10198,10201,10205,10211,10219,10227,10230,10301],[16,10199,10200],{},"Using JetBrains Rider using IIS Express to run asp.net core 3.1 web application, my httpcontext was null and had issues getting request bodies etc.  The exception message was",[16,10202,10203],{},[1128,10204,10195],{},[16,10206,10207,10208,10210],{},"I could run the application with Visual Studio 2019 without any issue (on IIS Express), definitely confusing.",[1118,10209],{},"\nThe issue was related to the following..",[16,10212,10213,10216],{},[1139,10214],{"href":10215},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Faspnetcore\u002Fissues\u002F8302",[1139,10217,10215],{"href":10215,"rel":10218},[3695],[16,10220,10221,10224],{},[1139,10222],{"href":10223},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Faspnetcore\u002Fissues\u002F7644",[1139,10225,10223],{"href":10223,"rel":10226},[3695],[16,10228,10229],{},"The solution",[2232,10231,10233],{"className":9998,"code":10232,"language":10000,"meta":1080,"style":1080},"public void ConfigureServices(IServiceCollection services)  \n{  \n    \u002F\u002F If using Kestrel:  \n    services.Configure\u003CKestrelServerOptions>(options =>  \n    {  \n        options.AllowSynchronousIO = true;  \n    });  \n  \n    \u002F\u002F If using IIS:  \n    services.Configure\u003CIISServerOptions>(options =>  \n    {  \n        options.AllowSynchronousIO = true;  \n    });  \n}\n",[2239,10234,10235,10240,10245,10250,10255,10260,10265,10270,10275,10280,10285,10289,10293,10297],{"__ignoreMap":1080},[4215,10236,10237],{"class":4217,"line":4218},[4215,10238,10239],{},"public void ConfigureServices(IServiceCollection services)  \n",[4215,10241,10242],{"class":4217,"line":1081},[4215,10243,10244],{},"{  \n",[4215,10246,10247],{"class":4217,"line":1084},[4215,10248,10249],{},"    \u002F\u002F If using Kestrel:  \n",[4215,10251,10252],{"class":4217,"line":4234},[4215,10253,10254],{},"    services.Configure\u003CKestrelServerOptions>(options =>  \n",[4215,10256,10257],{"class":4217,"line":4240},[4215,10258,10259],{},"    {  \n",[4215,10261,10262],{"class":4217,"line":4246},[4215,10263,10264],{},"        options.AllowSynchronousIO = true;  \n",[4215,10266,10267],{"class":4217,"line":4252},[4215,10268,10269],{},"    });  \n",[4215,10271,10272],{"class":4217,"line":4258},[4215,10273,10274],{},"  \n",[4215,10276,10277],{"class":4217,"line":4264},[4215,10278,10279],{},"    \u002F\u002F If using IIS:  \n",[4215,10281,10282],{"class":4217,"line":4270},[4215,10283,10284],{},"    services.Configure\u003CIISServerOptions>(options =>  \n",[4215,10286,10287],{"class":4217,"line":4276},[4215,10288,10259],{},[4215,10290,10291],{"class":4217,"line":4282},[4215,10292,10264],{},[4215,10294,10295],{"class":4217,"line":4288},[4215,10296,10269],{},[4215,10298,10299],{"class":4217,"line":4294},[4215,10300,9887],{},[4682,10302,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":10304},[],"2020-04-22T18:48:09.024Z","Recently, I have been using Rider much more often and thought I would document recent issue (only noticed in Rider) not Visual Studio with IIS Express.",{},"\u002Farticles\u002Fsynchronous-operations-are-disallowed-call-readasync-or-set-allowsynchronousio-to-true-instead",{"title":10195,"description":10306},"articles\u002Fsynchronous-operations-are-disallowed-call-readasync-or-set-allowsynchronousio-to-true-instead",[10312],"jetbrains","W9-zObQ1vw40leeRRBiFH70kjEGIop5PQSL-8S2-UYM",{"id":10315,"title":10316,"author":1915,"body":10317,"createdAt":10405,"description":10406,"extension":1101,"img":10377,"meta":10407,"navigation":1104,"path":10408,"seo":10409,"stem":10410,"tags":10411,"updatedAt":10405,"__hash__":10412},"articles\u002Farticles\u002Fgithub-desktop–‘husky’--pre-commit-exception.md","GitHub Desktop ‘husky’ pre commit Exception",{"type":10,"value":10318,"toc":10403},[10319,10322,10325,10333,10373,10385,10388,10391,10394,10397,10400],[16,10320,10321],{},"After adding a solution to my local GIT repository, and comitting to local master I received the following exception…",[19,10323,10324],{},"Commit failed - exit code 1 received, with output: 'husky > pre-commit (node v12.16.2)",[16,10326,10327,10330,10332],{},[4215,10328,10329],{},"npm run lint",[4215,10331,10329],{}," >\nvuesion@3.7.2 lint D:_Projects\\GitHub\\GitHub\\Yardy\\VueEParent\\VueE\\VueE\\PWA\\vuesion-master",[16,10334,10335,10337,10338,10340,10343,10345,10346,10348,10349,10351,10354,10355,10357,10358,10360,10361,10363,10364,10366,10367,10369,10370,10372],{},[4215,10336,10329],{}," > vuesion lint\n",[4215,10339,10329],{},[4215,10341,10342],{},"npm run test",[4215,10344,10342],{}," > vuesion@3.7.2 test D:_Projects\\GitHub\\GitHub\\Yardy\\VueEParent\\VueE\\VueE\\PWA\\vuesion-master\n",[4215,10347,10342],{}," > vuesion test --coverage\n",[4215,10350,10342],{},[4215,10352,10353],{},"vuesion prettier --staged","   Finding changed files since git revision 5f8e91e.\n",[4215,10356,10353],{},"   Found 334 changed files.\n",[4215,10359,10342],{}," PASS src\u002Fapp\u002Fshared\u002Fcomponents\u002FVueDropdownMenu\u002FVueDropdownMenu.spec.ts\n",[4215,10362,10342],{}," PASS src\u002Fapp\u002Fshared\u002Fcomponents\u002FVueButton\u002FVueButton.spec.ts\n",[4215,10365,10342],{}," PASS src\u002Fapp\u002Fshared\u002Fcomponents\u002FVueSlider\u002FVueSlider.spec.ts\n",[4215,10368,10342],{}," PASS src\u002Fapp\u002Fshared\u002Fcomponents\u002FVueAutocomplete\u002FVueAutocomplete.spec.ts (5.11s)\n",[4215,10371,10342],{}," PASS src\u002Fapp\u002Fshared\u002Fcomponents\u002FVueStarRating\u002FVueStarRating.spe",[16,10374,10375],{},[1139,10376,10378],{"href":10377},"\u002Farticles\u002Fimages\u002FFSMlV0tu1N_637229069433438891.png",[156,10379],{"style":10380,"title":10381,"src":10382,"alt":10381,"width":10383,"height":10384,"border":8404},"border: 0px currentcolor; display: inline; background-image: none;","FSMlV0tu1N","\u002Farticles\u002Fimages\u002FFSMlV0tu1N_thumb_637229069434485862.png",417,360,[16,10386,10387],{},"Attempts & Solution:",[16,10389,10390],{},"*Tried adding C:\\Program Files\\Git\\bin to PATH – no change (tried a commit and still have the issue)\n*Tried adding C:\\Program Files\\nodejs to PATH – no change (tried a commit and still have the issue)\n*Got it (worked)",[16,10392,10393],{},"npm rebuild\nremoved the node_modules",[16,10395,10396],{},"performed my commit",[16,10398,10399],{},"npm install",[16,10401,10402],{},"All good for now",{"title":1080,"searchDepth":1081,"depth":1081,"links":10404},[],"2020-04-19T15:29:03.532Z","GitHub Desktop issue with pre-commit package and related hooks? Struggled with this one this morning and tried a few things.  I thought I would document so it may help others struggling with the same issue.",{},"\u002Farticles\u002Fgithub-desktop-'husky'-pre-commit-exception",{"title":10316,"description":10406},"articles\u002Fgithub-desktop–‘husky’--pre-commit-exception",[5660],"t0XlubouJE4FtSJ9GeIA8Xwjdns6LCNLcGxCMFZjgA0",{"id":10414,"title":10415,"author":1915,"body":10416,"createdAt":10624,"description":10625,"extension":1101,"img":10626,"meta":10627,"navigation":1104,"path":10628,"seo":10629,"stem":10630,"tags":10631,"updatedAt":10624,"__hash__":10635},"articles\u002Farticles\u002Fopenidconnect-proxy-authentication-required.md","OpenIdConnect  - Proxy Authentication Required",{"type":10,"value":10417,"toc":10622},[10418,10421,10582,10586,10589,10619],[16,10419,10420],{},"While setting up ASP.NET Core with OpenID Connect I am getting the following exception on the web server (hosting via IIS).",[2232,10422,10424],{"className":8648,"code":10423,"language":8650,"meta":1080,"style":1080},"System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https:\u002F\u002Fchild.mydomain.com\u002FIdp\u002F.well-known\u002Fopenid-configuration'. ---> \nSystem.IO.IOException: IDX20807: Unable to retrieve document from: 'https:\u002F\u002Fchild.mydomain.com\u002FIdp\u002F.well-known\u002Fopenid-configuration'. \nHttpResponseMessage: 'StatusCode: 407, ReasonPhrase: 'Proxy Authorization Required', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, \nHeaders: { Proxy-Authenticate: NTLM Date: Wed, 08 Apr 2020 14:13:30 GMT Pragma: no-cache Cache-Control: no-cache Via: 1.1 ws5001.ch2m.com:8080 Proxy-Connection: keep-alive Content-Type: text\u002Fhtml; charset=\"UTF-8\" Content-Length: 415 }', HttpResponseMessage.Content: \n\u003C!DOCTYPE HTML PUBLIC \"-\u002F\u002FIETF\u002F\u002FDTD HTML 2.0\u002F\u002FEN\"> \u003Chtml>\u003Chead> \u003Ctitle>\n    407 Proxy Authentication Required\u003C\u002Ftitle> \u003C\u002Fhead>\u003Cbody> \n    Proxy Authentication Required \n\nThis server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.\n\u003C\u002Fbody>\u003C\u002Fhtml>\nat Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel) at\nMicrosoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel) at\nMicrosoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel) --- \nEnd of inner exception stack trace --- at\nMicrosoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel) at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler\n.HandleChallengeAsyncInternal(AuthenticationProperties properties) at\nMicrosoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleChallengeAsync(AuthenticationProperties properties) at\nMicrosoft.AspNetCore.Authentication.AuthenticationHandler`1.ChallengeAsync(AuthenticationProperties properties) at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties) at\nMicrosoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at\nMicrosoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at\nMicrosoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.\u003CInvoke>g__Awaited|(ExceptionHandlerMiddleware middleware, HttpContext context,\n",[2239,10425,10426,10431,10436,10441,10446,10476,10495,10500,10504,10509,10521,10526,10531,10536,10541,10546,10551,10556,10561,10566,10571],{"__ignoreMap":1080},[4215,10427,10428],{"class":4217,"line":4218},[4215,10429,10430],{"class":8259},"System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https:\u002F\u002Fchild.mydomain.com\u002FIdp\u002F.well-known\u002Fopenid-configuration'. ---> \n",[4215,10432,10433],{"class":4217,"line":1081},[4215,10434,10435],{"class":8259},"System.IO.IOException: IDX20807: Unable to retrieve document from: 'https:\u002F\u002Fchild.mydomain.com\u002FIdp\u002F.well-known\u002Fopenid-configuration'. \n",[4215,10437,10438],{"class":4217,"line":1084},[4215,10439,10440],{"class":8259},"HttpResponseMessage: 'StatusCode: 407, ReasonPhrase: 'Proxy Authorization Required', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, \n",[4215,10442,10443],{"class":4217,"line":4234},[4215,10444,10445],{"class":8259},"Headers: { Proxy-Authenticate: NTLM Date: Wed, 08 Apr 2020 14:13:30 GMT Pragma: no-cache Cache-Control: no-cache Via: 1.1 ws5001.ch2m.com:8080 Proxy-Connection: keep-alive Content-Type: text\u002Fhtml; charset=\"UTF-8\" Content-Length: 415 }', HttpResponseMessage.Content: \n",[4215,10447,10448,10450,10452,10455,10458,10461,10464,10466,10468,10470,10472,10474],{"class":4217,"line":4240},[4215,10449,9346],{"class":8259},[4215,10451,9349],{"class":8800},[4215,10453,10454],{"class":4666}," HTML",[4215,10456,10457],{"class":4666}," PUBLIC",[4215,10459,10460],{"class":4669}," \"-\u002F\u002FIETF\u002F\u002FDTD HTML 2.0\u002F\u002FEN\"",[4215,10462,10463],{"class":8259},"> \u003C",[4215,10465,8650],{"class":8800},[4215,10467,9471],{"class":8259},[4215,10469,9378],{"class":8800},[4215,10471,10463],{"class":8259},[4215,10473,9474],{"class":8800},[4215,10475,8910],{"class":8259},[4215,10477,10478,10481,10483,10486,10488,10490,10492],{"class":4217,"line":4246},[4215,10479,10480],{"class":8259},"    407 Proxy Authentication Required\u003C\u002F",[4215,10482,9474],{"class":8800},[4215,10484,10485],{"class":8259},"> \u003C\u002F",[4215,10487,9378],{"class":8800},[4215,10489,9471],{"class":8259},[4215,10491,9586],{"class":8800},[4215,10493,10494],{"class":8259},"> \n",[4215,10496,10497],{"class":4217,"line":4252},[4215,10498,10499],{"class":8259},"    Proxy Authentication Required \n",[4215,10501,10502],{"class":4217,"line":4258},[4215,10503,4231],{"emptyLinePlaceholder":1104},[4215,10505,10506],{"class":4217,"line":4264},[4215,10507,10508],{"class":8259},"This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.\n",[4215,10510,10511,10513,10515,10517,10519],{"class":4217,"line":4270},[4215,10512,8902],{"class":8259},[4215,10514,9586],{"class":8800},[4215,10516,8821],{"class":8259},[4215,10518,8650],{"class":8800},[4215,10520,8910],{"class":8259},[4215,10522,10523],{"class":4217,"line":4276},[4215,10524,10525],{"class":8259},"at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel) at\n",[4215,10527,10528],{"class":4217,"line":4282},[4215,10529,10530],{"class":8259},"Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel) at\n",[4215,10532,10533],{"class":4217,"line":4288},[4215,10534,10535],{"class":8259},"Microsoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel) --- \n",[4215,10537,10538],{"class":4217,"line":4294},[4215,10539,10540],{"class":8259},"End of inner exception stack trace --- at\n",[4215,10542,10543],{"class":4217,"line":4300},[4215,10544,10545],{"class":8259},"Microsoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel) at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler\n",[4215,10547,10548],{"class":4217,"line":4306},[4215,10549,10550],{"class":8259},".HandleChallengeAsyncInternal(AuthenticationProperties properties) at\n",[4215,10552,10553],{"class":4217,"line":4312},[4215,10554,10555],{"class":8259},"Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleChallengeAsync(AuthenticationProperties properties) at\n",[4215,10557,10558],{"class":4217,"line":4318},[4215,10559,10560],{"class":8259},"Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.ChallengeAsync(AuthenticationProperties properties) at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties) at\n",[4215,10562,10563],{"class":4217,"line":4324},[4215,10564,10565],{"class":8259},"Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at\n",[4215,10567,10568],{"class":4217,"line":4330},[4215,10569,10570],{"class":8259},"Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at\n",[4215,10572,10573,10576,10579],{"class":4217,"line":4336},[4215,10574,10575],{"class":8259},"Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.\u003C",[4215,10577,10578],{"class":8665},"Invoke",[4215,10580,10581],{"class":8259},">g__Awaited|(ExceptionHandlerMiddleware middleware, HttpContext context,\n",[1150,10583,10585],{"id":10584},"solution","Solution",[16,10587,10588],{},"Adding the following (for now solved this issue)",[2232,10590,10592],{"className":9998,"code":10591,"language":10000,"meta":1080,"style":1080},".AddOpenIdConnect(\"oidc\", options =>  { \n    options.BackchannelHttpHandler = new HttpClientHandler { \n    UseProxy = false, \n    UseDefaultCredentials = true \n }; \n",[2239,10593,10594,10599,10604,10609,10614],{"__ignoreMap":1080},[4215,10595,10596],{"class":4217,"line":4218},[4215,10597,10598],{},".AddOpenIdConnect(\"oidc\", options =>  { \n",[4215,10600,10601],{"class":4217,"line":1081},[4215,10602,10603],{},"    options.BackchannelHttpHandler = new HttpClientHandler { \n",[4215,10605,10606],{"class":4217,"line":1084},[4215,10607,10608],{},"    UseProxy = false, \n",[4215,10610,10611],{"class":4217,"line":4234},[4215,10612,10613],{},"    UseDefaultCredentials = true \n",[4215,10615,10616],{"class":4217,"line":4240},[4215,10617,10618],{}," };\n",[4682,10620,10621],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .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":1080,"searchDepth":1081,"depth":1081,"links":10623},[],"2020-04-09T16:52:26.395Z","While working through setup and configuration of Identity Server 4, I came across this authentication proxy issue.  Maybe this will help you out.","\u002Farticles\u002Fimages\u002Fopenidconnect.png",{},"\u002Farticles\u002Fopenidconnect-proxy-authentication-required",{"title":10415,"description":10625},"articles\u002Fopenidconnect-proxy-authentication-required",[10632,10633,10634],"netcore","authentication","openid","BUI49bXPepv-NCmQ8IZtCDnHIgylvqx-CIRegHnSAtw",{"id":10637,"title":10638,"author":1915,"body":10639,"createdAt":10678,"description":10679,"extension":1101,"img":10651,"meta":10680,"navigation":1104,"path":10681,"seo":10682,"stem":10683,"tags":10684,"updatedAt":10678,"__hash__":10686},"articles\u002Farticles\u002Fyour-connection-is-not-private-google-chrome.md","Your connection is not private–Google Chrome",{"type":10,"value":10640,"toc":10676},[10641,10644,10654,10660,10663,10673],[16,10642,10643],{},"Seen1 this \"Your connection is not private” while working with https on your localhost (workstation).",[16,10645,10646],{},[1139,10647,10649],{"href":10648},"\u002Farticles\u002Fimages\u002Fimage_637206600346445330.png",[156,10650],{"style":10380,"title":158,"src":10651,"alt":158,"width":10652,"height":10653,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_637206600347776935.png",497,433,[16,10655,10656,10657,10659],{},"In Chrome, put in chrome:\u002F\u002Fflags\u002F#allow-insecure-localhost in the address bar.",[1118,10658],{},"\nEnable the option that says \"Allow invalid certificates for resources loaded from localhost\".",[16,10661,10662],{},"Restart Chrome, and it should allow the site.",[16,10664,10665],{},[1139,10666,10668],{"href":10667},"\u002Farticles\u002Fimages\u002Fimage_637206600348897864.png",[156,10669],{"style":10380,"title":158,"src":10670,"alt":158,"width":10671,"height":10672,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_637206600350111622.png",499,79,[16,10674,10675],{},"Worked like a charm!",{"title":1080,"searchDepth":1081,"depth":1081,"links":10677},[],"2020-03-24T15:20:35.123Z","Working local, working with https? Got your desktop environment working well, however while using Chrome and browsing you get this \"not private\" error.  You can continue working\u002Fbrowsing if you click through advanced and proceed.  This is great but if you are reading this my bet you are looking for a better solution.  Read on!",{},"\u002Farticles\u002Fyour-connection-is-not-private-google-chrome",{"title":10638,"description":10679},"articles\u002Fyour-connection-is-not-private-google-chrome",[10685,8356,10632],"angular","gHd-_VYIEkDSYbxkw6rXref1-CvJ-95vU8g6QOgK9qc",{"id":10688,"title":10689,"author":1915,"body":10690,"createdAt":10803,"description":10804,"extension":1101,"img":10752,"meta":10805,"navigation":1104,"path":10806,"seo":10807,"stem":10808,"tags":10809,"updatedAt":10803,"__hash__":10810},"articles\u002Farticles\u002Fancm-in-process-start-failure-shenanigans.md","ANCM InProcess Start Failure Shenanigans",{"type":10,"value":10691,"toc":10801},[10692,10700,10717,10724,10732,10735,10740,10742,10755,10758,10783,10786,10789,10799],[16,10693,10694,10695,10699],{},"If you are using .NET Core and have not received the following error\u002Fexception message I will send you $1.00.  Let me know!  ",[10696,10697,10698],"b",{},"HTTP Error 500.30 - ANCM In-Process Start Failure","\nCommon solutions to this issue:",[48,10701,10702,10704,10706,10711,10713,10715],{},[51,10703,8150],{},[51,10705,8153],{},[51,10707,10708,10709],{},"The application started but threw an exception during startup   ",[10696,10710,8160],{},[51,10712,8165],{},[51,10714,8168],{},[51,10716,8171],{},[16,10718,10719,10720,10723],{},"I have ran into this plenty of times already.  There are many reasons but at it’s root dotnet is not able to start up for one of many reasons.  As I run into my issues I will update this post with them.  So far, with ASP.NET Core 3.1.1  1. The IIS Application Pool – Advanced Settings “Enable 32-Bit Applications” – ",[19,10721,10722],{},"setting to False fixed my issue ","(this site was deployed to an on-premise IIS Server)  2. Azure installation – It was more difficult to identify the source of the issue as I was not working directly with IIS (Internet Information Server).  I first tried logging via App Service Logs,  and view the streaming logs which led me to error message similar to..",[16,10725,10726,10731],{},[1128,10727,10728,10729],{},"”IIS received the request; however, an internal error occurred during the processing of the request. The root cause of this error depends on which module handles the request and what was happening in the worker process when this error occurred.\u003C\u002Fli>     \u003Cli>IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS permissions are set incorrectly.”",[1118,10730],{},"\nI then worked towards running the web application from command line to hope it gave me more information.\ni.e. Diagnostic Console – Debug Console then running the web assembly via “dotnet web.dll” (in this case my application was called Web). ",[16,10733,10734],{},"This gave me a much better startup.cs issue. I had good sense to recognize the issue\u002Fexception was within my startup class. \nI had my first real clue from the following message…",[16,10736,10737],{},[1128,10738,10739],{},"”Unhandled exception. System.IO.DirectoryNotFoundException: D:\\home\\site\\wwwroot\\Scripts\\ at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters) at\nMicrosoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root) at Web.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, LinkGenerator lin”",[1128,10741],{},[16,10743,10744],{},[1128,10745,10746],{},[1139,10747,10749],{"href":10748},"\u002Farticles\u002Fimages\u002Fimage_637160171567190817.png",[156,10750],{"title":158,"style":10751,"border":8404,"alt":158,"src":10752,"width":10753,"height":10754},"border: 0px currentcolor; border-image: none; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_637160171568626232.png",722,343,[16,10756,10757],{},"I had used in prior 2.1 Core solution a scripts static directly which did not exist with this 3.1 solution.",[2232,10759,10761],{"className":9998,"code":10760,"language":10000,"meta":1080,"style":1080},"app.UseStaticFiles(new StaticFileOptions   {    \nFileProvider = new PhysicalFileProvider\n(Path.Combine(Directory.GetCurrentDirectory(), \"Scripts\")),\nRequestPath = \"\u002FScripts\" });\n",[2239,10762,10763,10768,10773,10778],{"__ignoreMap":1080},[4215,10764,10765],{"class":4217,"line":4218},[4215,10766,10767],{},"app.UseStaticFiles(new StaticFileOptions   {    \n",[4215,10769,10770],{"class":4217,"line":1081},[4215,10771,10772],{},"FileProvider = new PhysicalFileProvider\n",[4215,10774,10775],{"class":4217,"line":1084},[4215,10776,10777],{},"(Path.Combine(Directory.GetCurrentDirectory(), \"Scripts\")),\n",[4215,10779,10780],{"class":4217,"line":4234},[4215,10781,10782],{},"RequestPath = \"\u002FScripts\" });\n",[16,10784,10785],{},"Once I removed this reference to \u002FScripts things worked and I was up and running. ",[16,10787,10788],{},"So, just note that this ANCM error is pretty good indication that something is wrong with Startup.cs class and so you really will be looking for logs for some indication as to what.",[16,10790,10791],{},[1139,10792,10794],{"href":10793},"\u002Farticles\u002Fimages\u002Fimage_637160171569717383.png",[156,10795],{"title":158,"style":10751,"border":8404,"alt":158,"src":10796,"width":10797,"height":10798},"\u002Farticles\u002Fimages\u002Fimage_thumb_637160171570874206.png",534,256,[4682,10800,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":10802},[],"2020-01-30T21:39:17.213Z","Common issue with .net core solutions when you deploy to a server and get ANCM In-Process failures",{},"\u002Farticles\u002Fancm-in-process-start-failure-shenanigans",{"title":10689,"description":10804},"articles\u002Fancm-in-process-start-failure-shenanigans",[5087,8994,10632],"uO_1neDf1NscBqxD75q-Jvy9EuQmMV849La98mkWnks",{"id":10812,"title":10813,"author":1915,"body":10814,"createdAt":10938,"description":10939,"extension":1101,"img":1915,"meta":10940,"navigation":1104,"path":10941,"seo":10942,"stem":10943,"tags":10944,"updatedAt":10938,"__hash__":10946},"articles\u002Farticles\u002Fsource-control-options-git-and-team-foundation-server-tfs.md","Source Control Options GIT and Team Foundation Server (TFS)",{"type":10,"value":10815,"toc":10934},[10816,10820,10834,10837,10860,10863,10869,10879,10893,10897,10904,10907,10916,10923,10926],[24,10817,10819],{"id":10818},"git-is-a-distributed-version-control-system","Git is a Distributed Version Control System",[48,10821,10822,10828],{},[51,10823,10824,10827],{},[19,10825,10826],{},"Each developer"," has the entire repository, including the entire change history on his\u002Fher local machine",[51,10829,10830,10833],{},[19,10831,10832],{},"The developer"," can see changeset history offline or commit (check-in) changes offline to his local repository",[16,10835,10836],{},"Since the entire repository is local, we do everything locally. This includes, but not limited to:",[48,10838,10839,10842,10845,10848,10851,10854,10857],{},[51,10840,10841],{},"Committing changes (Check-in)",[51,10843,10844],{},"Viewing commit history",[51,10846,10847],{},"Creating a new branch",[51,10849,10850],{},"Merging branches",[51,10852,10853],{},"Moving to a different branch",[51,10855,10856],{},"Deleting branches",[51,10858,10859],{},"Reverting older commits",[16,10861,10862],{},"Yes we do have to Check-in or 'Push' our changes to the remote repository.",[16,10864,10865,10866,8874],{},"'Check-in' within Git is divided into ",[19,10867,10868],{},"2 parts",[16,10870,10871,10874,10875,10878],{},[19,10872,10873],{},"Commit"," and **Push\n",[19,10876,10877],{},"Developers can now commit locally","whatever they want – Ugly code, comments, and work in progress. The other developers won’t get those changes as the commit is performed entirely local on their respective PC. When the code is ready for the team, they can Push the code changes to the remote repository.  This workflow gives the developer addition management of changes and when\u002Fhow things are pushed into the central repository for team consumption.",[16,10880,1959,10881,10884,10885,10888,10889,10892],{},[19,10882,10883],{},"Staging","concept …. this is like ",[19,10886,10887],{},"Included","\u002F",[19,10890,10891],{},"Excluded","changes in TFS. Only staged files will be committed. Again, why? (well say locally modified configuration files can stay out of source control)",[24,10894,10896],{"id":10895},"branches-and-merges","Branches and Merges",[16,10898,10899,10900,10903],{},"In TFS\u002FTFSVC, ",[19,10901,10902],{},"Branch","will create a new directory with a copy of all files and directories of the parent Branch. For a developer to work on that new branch, they will have to copy that directory to his hard disk, essentially having another folder with the source code.",[16,10905,10906],{},"With Git, each branch is not a copy of the files from the parent branch. Instead, it’s simply a pointer to the Commit in the parent Branch from where we created our new branch.  With Git when working on a different branch, we tell Git “Move to another branch” (Checkout command) and Git will change our working area to match the desired branch. Again, there is a performance benefit as this entire action is performed locally.  Git already contains all the branches on the local machine.",[16,10908,10909,10912,10913,10915],{},[19,10910,10911],{},"Merging"," is a lightweight operation. We can merge any branch to any branch. We can merge the entire difference or a specific Commit. Git will find the “Base” Commit where the branches split and allow us to resolve conflicts (This is the same as in TFS)",[1118,10914],{},"\nA good practice with Git is to create a new branch to work on a big feature. Eventually, merging that branch to the master branch and discarding the new branch entirely.",[16,10917,10918],{},[1139,10919,10922],{"href":10920,"target":1142,"rel":10921},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Branching-Branches-in-a-Nutshell",[6921],"Reference\u002FTutorial on GIT branching",[16,10924,10925],{},"TFS\u002FTFVC is Centralized Version Control System",[48,10927,10928,10931],{},[51,10929,10930],{},"the developer has a copy of the repository file system on his machine",[51,10932,10933],{},"offline actions like commits (check-ins)  and seeing history are impossible since the local repository can’t save “changes”",{"title":1080,"searchDepth":1081,"depth":1081,"links":10935},[10936,10937],{"id":10818,"depth":1084,"text":10819},{"id":10895,"depth":1084,"text":10896},"2020-01-21","Git has been gaining momentum lately and continues to be the path forward for all organizations (including Microsoft) as the source control of record.  What are the differences, benefits...read more...",{},"\u002Farticles\u002Fsource-control-options-git-and-team-foundation-server-tfs",{"title":10813,"description":10939},"articles\u002Fsource-control-options-git-and-team-foundation-server-tfs",[5661,10945,8526,5660],"teamfoundationserver","z27ZBLeINXv4DaOx5aV-Ihtuz5pCxHT3joVG2EXl5Z0",{"id":10948,"title":10949,"author":1915,"body":10950,"createdAt":11039,"description":11040,"extension":1101,"img":11041,"meta":11042,"navigation":1104,"path":11043,"seo":11044,"stem":11045,"tags":11046,"updatedAt":11039,"__hash__":11047},"articles\u002Farticles\u002Fnpm-dependencies-vs-devdependencies.md","NPM - dependencies vs devDependencies",{"type":10,"value":10951,"toc":11037},[10952,10955,10958,10967,10970,10993,11002,11029],[16,10953,10954],{},"Technically, when using a bundler like webpack, the result will not make a difference with regard to the output of your bundling process.",[16,10956,10957],{},"That being said, dividing the packages in dependencies and devDependencies still helps you (and others looking at your package.json) to understand which packages are meant to end up being a part of the bundle created (dependencies), and which are needed to build the bundle only (devDependencies).",[16,10959,10960,10961,10963,10964,10966],{},"Just remember main principle:",[1118,10962],{},"\n-> If you need package in production put it into dependencies (most likely axios should be in dependencies in your case).",[1118,10965],{},"\n-> If you need package only during development, put it into devDependencies (e.g. unit-test libraries, which isn't needed in productions should be in devDependencies",[16,10968,10969],{},"Summary of important behavior differences:",[16,10971,10972,10978,10979,10981,10983,10984,10987,10989,10992],{},[1139,10973,10975],{"href":10974},"https:\u002F\u002Fgithub.com\u002Fnpm\u002Fnpm\u002Fblob\u002F2e3776bf5676bc24fec6239a3420f377fe98acde\u002Fdoc\u002Ffiles\u002Fpackage.json.md#dependencies",[2239,10976,10977],{},"dependencies"," are installed on both:",[1118,10980],{},[2239,10982,10399],{}," from a directory that contains ",[2239,10985,10986],{},"package.json",[1118,10988],{},[2239,10990,10991],{},"npm install $package"," on any other directory",[16,10994,10995,11001],{},[1139,10996,10998],{"href":10997},"https:\u002F\u002Fgithub.com\u002Fnpm\u002Fnpm\u002Fblob\u002F2e3776bf5676bc24fec6239a3420f377fe98acde\u002Fdoc\u002Ffiles\u002Fpackage.json.md#devdependencies",[2239,10999,11000],{},"devDependencies"," are:",[16,11003,11004,11005,11007,11008,11010,11011,11014,11015,11017,11018,11021,11022,11025,11026,11028],{},"also installed on ",[2239,11006,10399],{}," on a directory that contains ",[2239,11009,10986],{},", unless you pass the ",[2239,11012,11013],{},"--production"," flag.",[1118,11016],{},"\nnot installed on ",[2239,11019,11020],{},"npm install \"$package\""," on any other directory, unless you give it the ",[2239,11023,11024],{},"--dev"," option.",[1118,11027],{},"\nare not installed transitively.",[16,11030,11031,11032],{},"Reference: ",[1139,11033,11036],{"href":11034,"target":1142,"rel":11035},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F18875674\u002Fwhats-the-difference-between-dependencies-devdependencies-and-peerdependencies\u002F22004559#22004559",[6921],"StackOverflow",{"title":1080,"searchDepth":1081,"depth":1081,"links":11038},[],"2020-01-07T14:02:12.046Z","Webpack is one of those technologies that has become increasingly important and yet struggles to be clear and obvious for most developers.  One of the best ways to get up to speed is to start from scratch (empty package.json) and build up one piece at a time to understand how it works.  Below are some notes about package.json and how dependencies are established.","\u002Farticles\u002Fimages\u002Fnpm.png",{},"\u002Farticles\u002Fnpm-dependencies-vs-devdependencies",{"title":10949,"description":11040},"articles\u002Fnpm-dependencies-vs-devdependencies",[8356,6990],"6JDIyAP2t28x6-aZhXKViT2l9gCy3dbGWKBsP3m-43Y",{"id":11049,"title":11050,"author":1915,"body":11051,"createdAt":11103,"description":11104,"extension":1101,"img":1915,"meta":11105,"navigation":1104,"path":11106,"seo":11107,"stem":11108,"tags":11109,"updatedAt":11103,"__hash__":11110},"articles\u002Farticles\u002Fdatetimeoffset-confusion.md","DateTimeOffset Confusion",{"type":10,"value":11052,"toc":11101},[11053,11065,11072,11075,11081,11084,11098],[16,11054,11055,11056,1200,11059,11061,11062,11064],{},"Consider the following timestamp: ",[19,11057,11058],{},"1995-07-14T13:05:00.0000000-03:00",[1118,11060],{},"\nWhen asked what the -03:00 at the end is called, many developers answer, “a time zone.”",[1118,11063],{},"\nWell…",[16,11066,11067,11068,11071],{},"The -03:00 does represent the offset from UTC.\nTo get the UTC time, ",[19,11069,11070],{},"invert"," the offset sign then add it to the time such as 13:05 + 3 = 16:05 in UTC.",[16,11073,11074],{},"Okay, following this ok now more details..",[16,11076,1959,11077,11080],{},[19,11078,11079],{},"mistake ","is in thinking that the offset is all there is to a time zone. Nope.",[16,11082,11083],{},"A time zone is a geographical area, and it consists of many pieces of information, such as",[48,11085,11086,11089,11092,11095],{},[51,11087,11088],{},"One or more offsets. (DST is a thing, after all.)",[51,11090,11091],{},"The dates when DST transitions happen. (These can and do change whenever governments feel like it.)",[51,11093,11094],{},"The amount of time applied when transitions happened. (It’s not one hour everywhere.)",[51,11096,11097],{},"The historical records of changes to the above rules.",[16,11099,11100],{},"In short, is is not possible to establish the time zone by the offset!",{"title":1080,"searchDepth":1081,"depth":1081,"links":11102},[],"2019-12-11T14:02:13.400Z","For many years, dates, times, time zones, new language date types such as datetimeoffset have confused developers.  I am writing this in hopes that you can refresh some details about the often used datetimeoffset type.",{},"\u002Farticles\u002Fdatetimeoffset-confusion",{"title":11050,"description":11104},"articles\u002Fdatetimeoffset-confusion",[10632],"zG8xVy_DOEaTRfDorK1eSmB3Hsgh4_eKm67fJnLbiak",{"id":11112,"title":11113,"author":1915,"body":11114,"createdAt":11240,"description":11241,"extension":1101,"img":11242,"meta":11243,"navigation":1104,"path":11244,"seo":11245,"stem":11246,"tags":11247,"updatedAt":11240,"__hash__":11248},"articles\u002Farticles\u002Fstring-comparisons.md","String Comparisons",{"type":10,"value":11115,"toc":11238},[11116,11119,11123,11130,11134,11140,11144,11150,11154,11160,11164,11170,11174,11183,11186,11199,11227,11236],[16,11117,11118],{},"In .NET there are 6 ways to compare strings.  Really? Why is it so difficult?",[1150,11120,11122],{"id":11121},"ordinal","Ordinal",[16,11124,11125,11126,11129],{},"Performs a simple byte comparison that is independent of language. This is most appropriate when comparing strings that are generated programmatically or ",[19,11127,11128],{},"when comparing case-sensitive resources"," such as passwords.",[1150,11131,11133],{"id":11132},"ordinalignorecase","OrdinalIgnoreCase",[16,11135,11136,11137,1200],{},"Treats the characters in the strings to compare as if they were converted to uppercase using the conventions of the invariant culture, and then performs a simple byte comparison that is independent of language. This is most appropriate when comparing strings that are generated programmatically or when",[19,11138,11139],{}," comparing case-insensitive resources such as paths and filenames",[1150,11141,11143],{"id":11142},"invariantculture","InvariantCulture",[16,11145,11146,11147,1200],{},"Compares strings in a linguistically relevant manner, but it is not suitable for display in any particular culture. Its",[19,11148,11149],{}," major application is to order strings in a way that will be identical across cultures",[1150,11151,11153],{"id":11152},"invariantcultureignorecase","InvariantCultureIgnoreCase",[16,11155,11156,11157,1200],{},"Compares strings in a linguistically relevant manner that ignores case, but it is not suitable for display in any particular culture. Its major application is to ",[19,11158,11159],{},"order strings in a way that will be identical across cultures",[1150,11161,11163],{"id":11162},"currentculture","CurrentCulture",[16,11165,11166,11167],{},"Can be used when strings are linguistically relevant. For example, if strings are displayed to the user, or if strings are the result of user interaction,",[19,11168,11169],{}," culture-sensitive string comparison should be used to order the string data.",[1150,11171,11173],{"id":11172},"currentcultureignorecase","CurrentCultureIgnoreCase",[16,11175,11176,11177,1200,11180,11182],{},"Can be used when strings are linguistically relevant but their case is not. For example, if strings are displayed to the user but case is unimportant, culture-sensitive, ",[19,11178,11179],{},"case-insensitive string comparison should be used to order the string data",[1118,11181],{},"\nTip: You should always specify explicitly the comparer as the default value is not consistent.",[16,11184,11185],{},"For instance,",[16,11187,11188,11191,11192,11195,11196,11198],{},[2239,11189,11190],{},"string.IndexOf"," uses the current culture whereas ",[2239,11193,11194],{},"string.Equals"," uses Ordinal.",[1118,11197],{},"\ni.e.",[2232,11200,11202],{"className":9998,"code":11201,"language":10000,"meta":1080,"style":1080},"string.Equals(\"\", \"\", StringComparison.Ordinal); \n\nnew [] { \"\" }.Contains(\"\", StringComparer.Ordinal); \n\nnew Dictionary(StringComparer.Ordinal); \n\n",[2239,11203,11204,11209,11213,11218,11222],{"__ignoreMap":1080},[4215,11205,11206],{"class":4217,"line":4218},[4215,11207,11208],{},"string.Equals(\"\", \"\", StringComparison.Ordinal); \n",[4215,11210,11211],{"class":4217,"line":1081},[4215,11212,4231],{"emptyLinePlaceholder":1104},[4215,11214,11215],{"class":4217,"line":1084},[4215,11216,11217],{},"new [] { \"\" }.Contains(\"\", StringComparer.Ordinal); \n",[4215,11219,11220],{"class":4217,"line":4234},[4215,11221,4231],{"emptyLinePlaceholder":1104},[4215,11223,11224],{"class":4217,"line":4240},[4215,11225,11226],{},"new Dictionary(StringComparer.Ordinal);\n",[16,11228,11229,11230,11235],{},"Refer to ",[1139,11231,11234],{"href":11232,"target":1142,"rel":11233},"https:\u002F\u002Fwww.meziantou.net\u002Fstring-comparisons-are-harder-than-it-seems.htm",[6921],"blog"," for additional samples and Rosyln analyzer to help with coding within your IDE.",[4682,11237,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":11239},[],"2019-12-10T17:37:51.332Z","Yes! There really are 6 ways to compare strings within .NET (I suspect other languages as well).  Hopefully this will shed some light on the options.","\u002Farticles\u002Fimages\u002FgzWyiS6VDt.png",{},"\u002Farticles\u002Fstring-comparisons",{"title":11113,"description":11241},"articles\u002Fstring-comparisons",[10632,7873],"Ib87YXw71UKKaBTOHX5m6SHBrTG_PcVtHJ-LK6igPl0",{"id":11250,"title":11251,"author":1915,"body":11252,"createdAt":11574,"description":11575,"extension":1101,"img":11294,"meta":11576,"navigation":1104,"path":11577,"seo":11578,"stem":11579,"tags":11580,"updatedAt":11574,"__hash__":11581},"articles\u002Farticles\u002Faspnet-core-3-things-i-learned-pro-tips-migration-to-aspnet-core-3.md","ASP.NET Core 3 Things I Learned \u002F Pro Tips \u002F Migration to ASP.NET Core 3",{"type":10,"value":11253,"toc":11572},[11254,11286,11297,11305,11308,11414,11429,11435,11460,11482,11487,11492,11506,11570],[48,11255,11256,11262,11265,11268,11271,11274,11277,11280,11283],{},[51,11257,11258,11259],{},"Starting up the web application with ",[19,11260,11261],{},"dotnet run",[51,11263,11264],{},"there are CLI parameters that you can use to set environment, port etc.",[51,11266,11267],{},"uses Kestrel to host the application",[51,11269,11270],{},"windows authentication cannot be turned on with dotnet run",[51,11272,11273],{},"can configure default behavior from within Visual Studio project properties",[51,11275,11276],{},"Debug, select Launch “Project” then you can set the App Url, default page, etc.",[51,11278,11279],{},"Hitting debug F5 within Visual Studio when the {Project Name} profile is selected hosts the application on Kestrel similar to dotnet run",[51,11281,11282],{},"dotnet run –e development will set the environment variable to ‘production’ (",[51,11284,11285],{},"in the following image you can see that I set the default environment for Kestrel runs to Development",[16,11287,11288,11289],{},"ASPNETCORE_ENVIRONMENT Development\n",[1139,11290,11292],{"href":11291},"\u002Farticles\u002Fimages\u002Fimage_637115214952391737.png",[156,11293],{"style":10380,"title":158,"src":11294,"alt":158,"width":11295,"height":11296,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_637115214953620084.png",545,336,[48,11298,11299,11302],{},[51,11300,11301],{},"JSON properties are now lower case in asp.net core (i.e. when return json from a method Json({object here}) would have all properties changed to lower case)",[51,11303,11304],{},"use the following code to avoid camel case names by default \nservices.AddControllersWithViews()\n       .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());",[16,11306,11307],{},"{\"Id\":9000,\"FullName\":\"John Smith\"} would be serialized to {\"id\":9000,\"fullName\":\"John Smith\"}       ",[48,11309,11310,11318,11321,11328,11382,11398,11407],{},[51,11311,11312,11313,11317],{},"Debug ASP.NET Core apps in Visual Studio IIS\u002FIISExpress etc. reference ",[1139,11314,8578],{"href":11315,"target":1142,"rel":11316},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fvisualstudio\u002Fdebugger\u002Fhow-to-enable-debugging-for-aspnet-applications?view=vs-2019",[6921],"        ",[51,11319,11320],{},"After setting a application within IIS, setting authentication to windows, selecting application pool with no managed code – you may get the following…\nThe in process request handler, Microsoft.AspNetCore.Server.IIS, was not referenced in the application.",[51,11322,11323],{},[1139,11324,11327],{"href":11325,"target":1142,"rel":11326},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Fhost-and-deploy\u002Fiis\u002F?view=aspnetcore-2.2",[6921],"Host ASP.NET Core on Windows with IIS",[51,11329,11330,11331,11334,11337],{},"In order to ready http request bodies in a synchronous manner I had to add following service configuration\n",[1139,11332],{"href":11333},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F47735133\u002Fasp-net-core-synchronous-operations-are-disallowed-call-writeasync-or-set-all",[1139,11335,11333],{"href":11333,"rel":11336},[3695],[2232,11338,11340],{"className":9998,"code":11339,"language":10000,"meta":1080,"style":1080},"\u002F\u002F If using Kestrel: \n\u002F\u002Fservices.Configure&lt;KestrelServerOptions>(options => \n\u002F\u002F{ \n\u002F\u002Foptions.AllowSynchronousIO = true; \n\u002F\u002F});\n\u002F\u002F If using IIS: \nservices.Configure > IISServerOptions>(options => { \noptions.AllowSynchronousIO = true; })  \n",[2239,11341,11342,11347,11352,11357,11362,11367,11372,11377],{"__ignoreMap":1080},[4215,11343,11344],{"class":4217,"line":4218},[4215,11345,11346],{},"\u002F\u002F If using Kestrel: \n",[4215,11348,11349],{"class":4217,"line":1081},[4215,11350,11351],{},"\u002F\u002Fservices.Configure&lt;KestrelServerOptions>(options => \n",[4215,11353,11354],{"class":4217,"line":1084},[4215,11355,11356],{},"\u002F\u002F{ \n",[4215,11358,11359],{"class":4217,"line":4234},[4215,11360,11361],{},"\u002F\u002Foptions.AllowSynchronousIO = true; \n",[4215,11363,11364],{"class":4217,"line":4240},[4215,11365,11366],{},"\u002F\u002F});\n",[4215,11368,11369],{"class":4217,"line":4246},[4215,11370,11371],{},"\u002F\u002F If using IIS: \n",[4215,11373,11374],{"class":4217,"line":4252},[4215,11375,11376],{},"services.Configure > IISServerOptions>(options => { \n",[4215,11378,11379],{"class":4217,"line":4258},[4215,11380,11381],{},"options.AllowSynchronousIO = true; })\n",[51,11383,11384,11385,7500,11390],{},"dotnet – info Shows what versions are installed on your workstation (",[1139,11386,11389],{"href":11387,"target":1142,"rel":11388},"https:\u002F\u002Fweblog.west-wind.com\u002Fposts\u002F2018\u002FJun\u002F05\u002FWhich-NET-Core-Runtime-Download-do-you-need",[6921],"Reference Rick Strahl",[1139,11391,11393],{"href":11392},"\u002Farticles\u002Fimages\u002Fimage_637115214954889487.png",[156,11394],{"style":10380,"title":158,"src":11395,"alt":158,"width":11396,"height":11397,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_637115214956154680.png",353,206,[51,11399,11400,11401,11404],{},"This looks really interesting but I have yet to install\u002Ftry it out Live Reload using dotnet watch ",[1139,11402],{"href":11403},"https:\u002F\u002Fweblog.west-wind.com\u002Fposts\u002F2019\u002FJun\u002F03\u002FBuilding-Live-Reload-Middleware-for-ASPNET-Core",[1139,11405,11403],{"href":11403,"rel":11406},[3695],[51,11408,11409,11410,11413],{},"IHostBuilder vs IWebHostBuilder – ASP.NET Core is used to build http endpoints using Kestrel web server. \nIWebHostbuilder ",[19,11411,11412],{},"remains for backward compatibility only",", and was used to encapsulate DI, Logging and configuration.  This was used in earlier versions of ASP.NET Core 3 for http workloads.",[16,11415,11416,11417,11422,11423,11428],{},"The default .NET Core 3 ASP.NET Core template sets up by default in the program.cs IHostBuilder, which is the ",[1139,11418,11421],{"href":11419,"target":1142,"rel":11420},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fhost\u002Fweb-host?view=aspnetcore-3.1",[6921],"recommended"," for all app types.  Documentation can be found at ",[1139,11424,11427],{"href":11425,"target":1142,"rel":11426},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fhost\u002Fgeneric-host?view=aspnetcore-3.1",[6921],"docs.microsoft.com",".  A host can encapsulates dependency injection, logging, configuration, IHostedService implementations.  Hosting is no longer bound to Kestrel and no longer bound to ASP.NET Core (oddly, this means you can start a host that doesn’t require Kestrel and doesn’t even need the ASP.NET Core Framework)",[16,11430,11431,11434],{},[19,11432,11433],{},"CreateHostBuilder"," has the following defaults",[48,11436,11437,11449,11452],{},[51,11438,11439,11440,11444,11445,1200],{},"Sets the ",[1139,11441,11443],{"href":11442},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Findex?view=aspnetcore-3.1#content-root","content root"," to the path returned by ",[1139,11446,11448],{"href":11447},"https:\u002F\u002Fdocs.microsoft.com\u002Fdotnet\u002Fapi\u002Fsystem.io.directory.getcurrentdirectory","GetCurrentDirectory",[51,11450,11451],{},"Loads host configuration from:\n----- Environment variables prefixed with \"DOTNET_\".\n----- Command-line arguments.",[51,11453,11454,11455,11459],{},"Loads app configuration from:\n----- appsettings.json.\n----- appsettings.{Environment}.json.\n----- ",[1139,11456,11458],{"href":11457},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Fsecurity\u002Fapp-secrets?view=aspnetcore-3.1","Secret Manager"," when the app runs in the Development environment.\n----- Environment variables.\n----- Command-line arguments.",[48,11461,11462,11470],{},[51,11463,11464,11465,11469],{},"Adds the following ",[1139,11466,11468],{"href":11467},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Flogging\u002Findex?view=aspnetcore-3.1","logging"," providers:\n----- Console\n----- Debug\n----- EventSource\n----- EventLog (only when running on Windows)",[51,11471,11472,11473,1158,11477,11481],{},"Enables ",[1139,11474,11476],{"href":11475},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fdependency-injection?view=aspnetcore-3.1#scope-validation","scope validation",[1139,11478,11480],{"href":11479},"https:\u002F\u002Fdocs.microsoft.com\u002Fdotnet\u002Fapi\u002Fmicrosoft.extensions.dependencyinjection.serviceprovideroptions.validateonbuild#Microsoft_Extensions_DependencyInjection_ServiceProviderOptions_ValidateOnBuild","dependency validation"," when the environment is Development.",[16,11483,11484],{},[19,11485,11486],{},"ConfigureWebHostDefaults ",[48,11488,11489],{},[51,11490,11491],{},"Loads host configuration from environment variables prefixed with \"ASPNETCORE_\".",[48,11493,11494],{},[51,11495,11496,11497,11501,11502,1200],{},"Sets ",[1139,11498,11500],{"href":11499},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fservers\u002Fkestrel?view=aspnetcore-3.1","Kestrel"," server as the web server and configures it using the app's hosting configuration providers. For the Kestrel server's default options, see ",[1139,11503,11505],{"href":11504},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fservers\u002Fkestrel?view=aspnetcore-3.1#kestrel-options","Kestrel web server implementation in ASP.NET Core",[48,11507,11508,11515,11522,11528,11536,11542,11545,11553,11562],{},[51,11509,11510,11511,1200],{},"Adds ",[1139,11512,11514],{"href":11513},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fservers\u002Fkestrel?view=aspnetcore-3.1#host-filtering","Host Filtering middleware",[51,11516,11510,11517,11521],{},[1139,11518,11520],{"href":11519},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Fhost-and-deploy\u002Fproxy-load-balancer?view=aspnetcore-3.1#forwarded-headers","Forwarded Headers middleware"," if ASPNETCORE_FORWARDEDHEADERS_ENABLED=true.",[51,11523,11524,11525,1200],{},"Enables IIS integration. For the IIS default options, see ",[1139,11526,11327],{"href":11527},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Fhost-and-deploy\u002Fiis\u002Findex?view=aspnetcore-3.1#iis-options",[51,11529,11530,11531,11535],{},"Configuration for Framework-provided services can be found ",[1139,11532,8578],{"href":11533,"target":1142,"rel":11534},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fcore\u002Ffundamentals\u002Fhost\u002Fgeneric-host?view=aspnetcore-3.1#framework-provided-services",[6921]," (any host lifetime, environment etc.)",[51,11537,11538,11539],{},"Unable to resolve service for type 'Microsoft.Extensions.Logging.ILoggerFactory' while attempting to activate 'Web.Startup'. – ",[19,11540,11541],{},"Exception\n",[51,11543,11544],{},"the startup constructor use to look like public Startup(IConfiguration configuration, ILoggerFactory loggerFactory)",[51,11546,11547,11548,7815],{},"new to ASP.NET Core 3 it is no longer possible to inject ILogger in Startup.cs and Program.cs (Reference: ",[1139,11549,11552],{"href":11550,"target":1142,"rel":11551},"https:\u002F\u002Fgithub.com\u002Faspnet\u002FAnnouncements\u002Fissues\u002F353",[6921],"Github",[51,11554,11555,11556,11561],{},"Another ",[1139,11557,11560],{"href":11558,"target":1142,"rel":11559},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-monitor\u002Fapp\u002Filogger#capture-ilogger-logs-from-startupcs-and-programcs-in-aspnet-core-apps",[6921],"reference"," to this change specifically calls this out",[51,11563,11564,11565],{},"Changes with ASP.NET Core 3 to Program.cs \u002F Startup.cs\nReference: ",[1139,11566,11569],{"href":11567,"target":1142,"rel":11568},"https:\u002F\u002Fandrewlock.net\u002Fexploring-the-new-project-file-program-and-the-generic-host-in-asp-net-core-3\u002F",[6921],"Andrew Lock",[4682,11571,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":11573},[],"2019-12-09T20:51:35.746Z","Moving from ASP.NET Core 2 to ASP.NET 3 (Migration) there were a number of 'things' I picked up and decided I would document as I moved through the application.  New Program.cs and Startup.cs changes, new logging configuration changes, and default ASP.NET Core tips included.",{},"\u002Farticles\u002Faspnet-core-3-things-i-learned-pro-tips-migration-to-aspnet-core-3",{"title":11251,"description":11575},"articles\u002Faspnet-core-3-things-i-learned-pro-tips-migration-to-aspnet-core-3",[10632],"w0iFgfavvdV8-1UR0gCTw4qVYXmyAzFa1CYkep7Rz8M",{"id":11583,"title":11584,"author":1915,"body":11585,"createdAt":11723,"description":11724,"extension":1101,"img":1915,"meta":11725,"navigation":1104,"path":11726,"seo":11727,"stem":11728,"tags":11729,"updatedAt":11723,"__hash__":11730},"articles\u002Farticles\u002Faspnet-core-slow-start-up.md","ASP.NET CORE–Slow Start Up",{"type":10,"value":11586,"toc":11721},[11587,11590,11676,11679,11709,11718],[16,11588,11589],{},"I was trying to determine why my asp.net core application as so slow during startup (F5 w\u002Fdebugging).\nI believe I found one of the reasons.\nBy default, a new asp.net core application has an appsettings.Development.json file. \nWithin this file there are several settings to set the default log level.  Typically, you will see something like the following",[2232,11591,11595],{"className":11592,"code":11593,"language":11594,"meta":1080,"style":1080},"language-json shiki shiki-themes github-light github-dark","{ \n\"Logging\": \n    { \n        \"LogLevel\": \n        {  \n            \"Default\": \"Debug\", \n            \"System\": \"Information\", \n            \"Microsoft\": \"Information\"\n        } \n    }  \n}  \n","json",[2239,11596,11597,11602,11610,11615,11622,11627,11640,11652,11662,11667,11672],{"__ignoreMap":1080},[4215,11598,11599],{"class":4217,"line":4218},[4215,11600,11601],{"class":8259},"{ \n",[4215,11603,11604,11607],{"class":4217,"line":1081},[4215,11605,11606],{"class":8255},"\"Logging\"",[4215,11608,11609],{"class":8259},": \n",[4215,11611,11612],{"class":4217,"line":1084},[4215,11613,11614],{"class":8259},"    { \n",[4215,11616,11617,11620],{"class":4217,"line":4234},[4215,11618,11619],{"class":8255},"        \"LogLevel\"",[4215,11621,11609],{"class":8259},[4215,11623,11624],{"class":4217,"line":4240},[4215,11625,11626],{"class":8259},"        {  \n",[4215,11628,11629,11632,11634,11637],{"class":4217,"line":4246},[4215,11630,11631],{"class":8255},"            \"Default\"",[4215,11633,3087],{"class":8259},[4215,11635,11636],{"class":4669},"\"Debug\"",[4215,11638,11639],{"class":8259},", \n",[4215,11641,11642,11645,11647,11650],{"class":4217,"line":4252},[4215,11643,11644],{"class":8255},"            \"System\"",[4215,11646,3087],{"class":8259},[4215,11648,11649],{"class":4669},"\"Information\"",[4215,11651,11639],{"class":8259},[4215,11653,11654,11657,11659],{"class":4217,"line":4258},[4215,11655,11656],{"class":8255},"            \"Microsoft\"",[4215,11658,3087],{"class":8259},[4215,11660,11661],{"class":4669},"\"Information\"\n",[4215,11663,11664],{"class":4217,"line":4264},[4215,11665,11666],{"class":8259},"        } \n",[4215,11668,11669],{"class":4217,"line":4270},[4215,11670,11671],{"class":8259},"    }  \n",[4215,11673,11674],{"class":4217,"line":4276},[4215,11675,9887],{"class":8259},[16,11677,11678],{},"Keep in mind the order of settings are as follows going from very verbose to turned off.",[48,11680,11681,11684,11687,11690,11693,11696,11699],{},[51,11682,11683],{},"Trace (Very Verbose)",[51,11685,11686],{},"Debug",[51,11688,11689],{},"Information",[51,11691,11692],{},"Warning",[51,11694,11695],{},"Error",[51,11697,11698],{},"Critical",[51,11700,11701,11702,11704,11705,11708],{},"None",[1118,11703],{},"\nI found that setting my development log settings to anything above Warning improved startup up time ",[19,11706,11707],{},"significantly","!",[16,11710,11711,11712,11717],{},"After I figured out above I did come across a Rick Strahl ",[1139,11713,11716],{"href":11714,"target":1142,"rel":11715},"https:\u002F\u002Fweblog.west-wind.com\u002Fposts\u002F2018\u002FDec\u002F31\u002FDont-let-ASPNET-Core-Default-Console-Logging-Slow-your-App-down#summary",[6921],"post",".  If you don’t follow Rick do.",[4682,11719,11720],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":11722},[],"2019-12-08T03:45:40.058Z","In an effort to speed up my development process, I determined that changing the logging level, even in development made a huge difference.  Keep this in mind, and let me know if you find this useful.",{},"\u002Farticles\u002Faspnet-core-slow-start-up",{"title":11584,"description":11724},"articles\u002Faspnet-core-slow-start-up",[10632],"Q1_YJbQEIsPuw5Us9AG0sFQVIpdMJzmtaPXHFL-GQ80",{"id":11732,"title":11733,"author":8,"body":11734,"createdAt":11821,"description":11822,"extension":1101,"img":1915,"meta":11823,"navigation":1104,"path":11824,"seo":11825,"stem":11826,"tags":11827,"updatedAt":11821,"__hash__":11828},"articles\u002Farticles\u002Fhttpclient-saga--related-noteslinks.md","HttpClient Saga and Related Notes Links",{"type":10,"value":11735,"toc":11819},[11736,11751,11767,11770,11781,11784,11799,11802,11805,11812],[16,11737,11738,11739,11742,11743,11747,11748],{},"On ",[19,11740,11741],{},".Net Full framework",", you can control the number of outgoing client connections by setting ",[1139,11744,11746],{"href":11745},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fsystem.net.servicepointmanager.defaultconnectionlimit?view=netframework-4.7#System_Net_ServicePointManager_DefaultConnectionLimit","ServicePointManager.DefaultConnectionLimit"," to the desired number. ",[19,11749,11750],{},"It is 2 by default.",[16,11752,11738,11753,11756,11757,11761,11762,11766],{},[19,11754,11755],{},".Net Core",", you can set it by changing ",[1139,11758,11760],{"href":11759},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fsystem.net.http.httpclienthandler.maxconnectionsperserver?view=netcore-2.0#System_Net_Http_HttpClientHandler_MaxConnectionsPerServer","HttpClientHandler.MaxConnectionsPerServer"," to your desired limit. The default is int.MaxValue -- much higher than the default for the full framework.  Gets or sets the maximum number of concurrent connections (per server endpoint) allowed when making requests using an ",[1139,11763,11765],{"href":11764},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fsystem.net.http.httpclient?view=netcore-2.0","HttpClient"," object. Note that the limit is per server endpoint, so for example a value of 256 would permit 256 concurrent connections to http:\u002F\u002Fwww.adatum.com\u002F and another 256 to http:\u002F\u002Fwww.adventure-works.com\u002F",[16,11768,11769],{},"References:",[16,11771,11772,11776,11777,11779],{},[1139,11773,11775],{"href":11745,"target":1142,"rel":11774},[6921],"ServicePointManager"," ",[1118,11778],{},[1139,11780,11760],{"href":11759},[16,11782,11783],{},"Before the introduction of the HttpClientFactory in .NET Core 2.1, it was common to use the HttpClient to make HTTP requests to services.  One of the big problems with using the HttpClient was the misuse of it. HttpClient implements IDisposable, when anything implements IDisposable, best practice tells us that we should wrap the calls we are making inside a using statement to allow proper disposal of the object. However the HTTPClient is different, even though it implements IDisposable, we shouldn’t be wrapping this in a using statement. The HttpClient is reusable and thread safe, so it makes it very inefficient and unnecessary to dispose of the HttpClient after each request is made. When you dispose of the HttpClient object the underlying socket is not immediately released. This can cause some serious issues like ‘sockets exhaustion’. The recommended way is to instantiated it once and reused it throughout the life of an application.",[16,11785,11786,11776,11791,11776,11793,11795,11796,11798],{},[1139,11787,11790],{"href":11788,"target":1142,"rel":11789},"https:\u002F\u002Faspnetmonsters.com\u002F2016\u002F08\u002F2016-08-27-httpclientwrong\u002F",[6921],"YOU'RE USING HTTPCLIENT WRONG AND IT IS DESTABILIZING YOUR SOFTWARE",[1118,11792],{},[1118,11794],{},"Unfortunately, not disposing of our HttpClient instance does not fix all of the issues with the HttpClient. The issue with creating a single instance of the HttpClient is that it won’t respect DNS changes, because we are creating a single instance of the HttpClient, we are keeping the connection open, ready to be reused. ",[1118,11797],{},"Due to these issues, the HttpClientFactory was created.",[16,11800,11801],{},"Using the HttpClientFactory removes the issues that we can run into when using the HttpClient, such as ‘sockets exhaustion’, due to not re-using the HttpClient throughout the life of an application.",[16,11803,11804],{},"When reusing your HttpClient you could then run into the issue of the client not respecting DNS changes. While the HttpClientFactory by default has a handler lifetime set to 2 mins, to get around DNS change issue, we are also able to set this handler lifetime to whatever we want.",[16,11806,11807],{},[1139,11808,11811],{"href":11809,"target":1142,"rel":11810},"http:\u002F\u002Fanthonygiretti.com\u002F2018\u002F09\u002F06\u002Fhow-to-unit-test-a-class-that-consumes-an-httpclient-with-ihttpclientfactory-in-asp-net-core\u002F",[6921],"How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core?",[16,11813,11814],{},[1139,11815,11818],{"href":11816,"target":1142,"rel":11817},"https:\u002F\u002Fcodereview.stackexchange.com\u002Fquestions\u002F227596\u002Fsimple-httpclient-usage-for-integration-tests-in-net-core",[6921],"Integration Testing",{"title":1080,"searchDepth":1081,"depth":1081,"links":11820},[],"2019-10-09T20:15:06.625Z","Recently, we migrated our applications to latest windows server from 2008 and ran into a number of issues with sockets, connection limits and timeouts.  The root of our issues is the default connection limits that we had not encountered before.  Below is part of our investigation and subsequent resolution to these issues.",{},"\u002Farticles\u002Fhttpclient-saga-related-noteslinks",{"title":11733,"description":11822},"articles\u002Fhttpclient-saga--related-noteslinks",[10632],"l1pMNA9gO17s0hmcoHaNRdtKD9yGrQyXApQIDK9aZKI",{"id":11830,"title":11831,"author":1915,"body":11832,"createdAt":12056,"description":1915,"extension":1101,"img":11858,"meta":12057,"navigation":1104,"path":12058,"seo":12059,"stem":12060,"tags":12061,"updatedAt":12056,"__hash__":12062},"articles\u002Farticles\u002Fvisual-studio-how-to-target-differentlatest-c-version-net-core-3-and-c-8.md","Visual Studio How to target different\u002Flatest c# version (.NET Core 3 and C# 8)",{"type":10,"value":11833,"toc":12054},[11834,11837,11851,11866,11877,11883,11959,11961,11971,11990,11996,12003,12009,12012,12033,12036,12041,12044,12050],[16,11835,11836],{},"Know which version of c# you were actually using or wanting to try latest c# 8 features?  How to check?",[48,11838,11839,11842,11845,11848],{},[51,11840,11841],{},"Open the project properties window (right click on project, select properties)",[51,11843,11844],{},"Select ‘Build’ from the left hand side options",[51,11846,11847],{},"Scroll down to the Advanced options",[51,11849,11850],{},"Select the desired version of c#, click ok   Wanting c# 8 selection? (released with .NET Core 3, and available as part of Visual Studio 2019 (latest release)     * For me, open Visual Studio select Help – Check for Updates (and download the latest release of VS.NET)",[16,11852,11853,11861,11862],{},[1139,11854,11856],{"href":11855},"\u002Farticles\u002Fimages\u002Fimage_637062268790299787.png",[156,11857],{"title":158,"style":10751,"border":8404,"alt":158,"src":11858,"width":11859,"height":11860},"\u002Farticles\u002Fimages\u002Fimage_thumb_637062268791269872.png",393,100,"   After the update, open VS.NET revisit project properties and c# 8 should be available in the ‘Language Version’ selection list….but wait it is not there (the selection list is disabled and they gave me a clue…",[1139,11863,11865],{"href":11864,"target":1142},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fdotnet\u002Fcsharp\u002Flanguage-reference\u002Fconfigure-language-version","Why can’t I select a different c# version?",[16,11867,11868],{},[1139,11869,11871],{"href":11870},"\u002Farticles\u002Fimages\u002Fimage_637062268792583127.png",[156,11872],{"title":158,"style":11873,"border":8404,"alt":158,"src":11874,"width":11875,"height":11876},"margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_637062268793729110.png",489,269,[16,11878,11879,11882],{},[1128,11880,11881],{},"”The latest C# compiler determines a default language version based on your project's target framework or frameworks. This is because the C# language may have features that rely on types or runtime components that are not available in every .NET implementation. This also ensures that for whatever target your project is built against, you get the highest compatible language version by default.”","  Ok, so now the c# version is not selectable, it is based on the projects target framework. Here is the conversion chart…    ",[2014,11884,11885,11898],{},[2017,11886,11887],{},[2020,11888,11889,11892,11895],{},[2023,11890,11891],{},"Target framework",[2023,11893,11894],{},"version",[2023,11896,11897],{},"C# language version default",[2037,11899,11900,11911,11921,11931,11940,11949],{},[2020,11901,11902,11905,11908],{},[2042,11903,11904],{},".NET Core",[2042,11906,11907],{},"3.x",[2042,11909,11910],{},"C# 8.0",[2020,11912,11913,11915,11918],{},[2042,11914,11904],{},[2042,11916,11917],{},"2.x",[2042,11919,11920],{},"C# 7.3",[2020,11922,11923,11926,11929],{},[2042,11924,11925],{},".NET Standard",[2042,11927,11928],{},"2.1",[2042,11930,11910],{},[2020,11932,11933,11935,11938],{},[2042,11934,11925],{},[2042,11936,11937],{},"2.0",[2042,11939,11920],{},[2020,11941,11942,11944,11947],{},[2042,11943,11925],{},[2042,11945,11946],{},"1.x",[2042,11948,11920],{},[2020,11950,11951,11954,11957],{},[2042,11952,11953],{},".NET Framework",[2042,11955,11956],{},"all",[2042,11958,11920],{},[1118,11960],{},[16,11962,11963,11964],{},"Finally, that was my answer.  ",[1139,11965,11967],{"href":11966},"\u002Farticles\u002Fimages\u002Fimage_637062268794831916.png",[156,11968],{"title":158,"style":10751,"border":8404,"alt":158,"src":11969,"width":10671,"height":11970},"\u002Farticles\u002Fimages\u002Fimage_thumb_637062268796116567.png",293,[16,11972,11973,11974,11978,11979,11983,11984,11987,11989],{},"References    ",[1139,11975,11977],{"href":11976,"target":1142},"https:\u002F\u002Fdotnet.microsoft.com\u002Fdownload\u002Fdotnet-core\u002F3.0","Download .NET Core 3 Direct"," option Released 2019-09-23    ",[1139,11980,11982],{"href":11981,"target":1142},"https:\u002F\u002Fwww.dotnetcurry.com\u002Fcsharp\u002F1489\u002Fcsharp-8-visual-studio-2019","New C# 8 Features","    ",[19,11985,11986],{},"One of the more important features…",[1118,11988],{},"\nNullable reference types (this is good addition)",[16,11991,11992,11993,11995],{},"The core idea is to allow variable type definitions to specify whether they can have null value assigned to them or not:     Weapon? canBeNull;",[1118,11994],{},"\nIWeapon cantBeNull;",[16,11997,11998,11999,12002],{},"Assigning a null value or a potential null value to a non-nullable variable results in a compiler warning\n(",[19,12000,12001],{},"the developer can configure the build to fail in case of such warnings, to be extra safe","):",[16,12004,12005,12006,12008],{},"canBeNull = null\n\u002F\u002F no warning",[1118,12007],{},"\ncantBeNull = null\n\u002F\u002F warning",[16,12010,12011],{},"cantBeNull = canBeNull;\n\u002F\u002F warning",[16,12013,12014,12015,12017,12018,12020,12021,12023,12024,12026,12027,12029,12030,12032],{},"Similarly, warnings are generated when dereferencing a nullable variable without checking it for null value first:",[1118,12016],{},"\ncanBeNull.Repair();\n\u002F\u002F warning",[1118,12019],{},"\ncantBeNull.Repair();\n\u002F\u002F no warning",[1118,12022],{},"\nif (canBeNull != null)",[1118,12025],{},"\n{",[1118,12028],{},"\ncanBeNull.Repair();\n\u002F\u002F no warning",[1118,12031],{},"\n}",[16,12034,12035],{},"The problem with such a change is that it breaks existing code:\nthe feature assumes that all variables from before the change are non-nullable.\nTo cope with that, static analysis for null-safety can be enabled selectively with a compiler switch at the project level.",[16,12037,12038],{},[19,12039,12040],{},"Developers can opt-in for nullability checking when they are ready to deal with the resulting warnings.",[16,12042,12043],{},"Still, this should be in their own best interest, as the warnings might reveal potential bugs in their code.",[16,12045,12046,12047,8874],{},"The switch is persisted as a property in the project file. There’s no user interface in Visual Studio 2019 yet for changing its value.\nTherefore, the following line must be ",[19,12048,12049],{},"added manually to the first PropertyGroup element of the project file to enable\nthe feature for the project",[12051,12052,12053],"nullable-context-options",{},"\nenable\n",{"title":1080,"searchDepth":1081,"depth":1081,"links":12055},[],"2019-10-09T14:07:59.731Z",{},"\u002Farticles\u002Fvisual-studio-how-to-target-differentlatest-c-version-net-core-3-and-c-8",{"title":11831,"description":1915},"articles\u002Fvisual-studio-how-to-target-differentlatest-c-version-net-core-3-and-c-8",[8526],"ypmVFhZTDDNRkorn4dMwIhgjCKVDrMBz-yfEqjhwNtM",{"id":12064,"title":12065,"author":1915,"body":12066,"createdAt":12146,"description":12147,"extension":1101,"img":12097,"meta":12148,"navigation":1104,"path":12149,"seo":12150,"stem":12151,"tags":12152,"updatedAt":12146,"__hash__":12154},"articles\u002Farticles\u002Fproduct-review-ndepend-part-1.md","Product Review NDepend Part 1",{"type":10,"value":12067,"toc":12144},[12068,12076,12084,12090,12100,12103,12112,12115,12125,12128,12138],[16,12069,12070,12071],{},"Today, I tried a code review extension for Visual Studio.  The product ",[1139,12072,12075],{"href":12073,"target":1142,"rel":12074},"https:\u002F\u002Fwww.ndepend.com\u002F",[6921],"NDepend",[48,12077,12078,12081],{},[51,12079,12080],{},"As it was as an extension, the installation process was simple and quick and painless",[51,12082,12083],{},"Setting up the product to review\u002Fanalyze my solution (including many projects) was also very easy!",[16,12085,12086,12087,12089],{},"Very quickly (within minutes) the extension was able to analyze my code against many best practices, standards and coding techniques.  There are so many features within this product it is hard to adequately evaluate all features in one go.  I will document initial findings and feelings about this product, and hope to provide future reviews as I discover each of the features.",[1118,12088],{},"\nThe immediate first thing I see is overview\u002Fdashboard of current solution\u002Fstatus, including 75 427 lines of code with a 5.5% debt ratio.",[16,12091,12092],{},[1139,12093,12095],{"href":12094},"\u002Farticles\u002Fimages\u002Fimage_636986200288720521.png",[156,12096],{"style":10380,"title":158,"src":12097,"alt":158,"width":12098,"height":12099,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636986200289974139.png",454,303,[16,12101,12102],{},"Of particular interest to me was the debt and issues identified.  The system includes 100+ code rules that can detect a wide range of code smells including complex methods, dead-code, bad object orientated usage etc..",[16,12104,12105],{},[1139,12106,12108],{"href":12107},"\u002Farticles\u002Fimages\u002Fimage_636986200291159252.png",[156,12109],{"style":10380,"title":158,"src":12110,"alt":158,"width":9224,"height":12111,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636986200292423409.png",202,[16,12113,12114],{},"Changing the sorting of issue, shows code related to each (in this case 70 rules)",[16,12116,12117],{},[1139,12118,12120],{"href":12119},"\u002Farticles\u002Fimages\u002Fimage_636986200294068991.png",[156,12121],{"style":10380,"title":158,"src":12122,"alt":158,"width":12123,"height":12124,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636986200295573812.png",208,470,[16,12126,12127],{},"Drilling into a few rules (by double clicking on any) you can see how this can be a very good tool to very quickly identify and put plans in place to resolve\u002Fcleanup and generally improve the code quality.  Rules can be edited, categorized and prioritized to meet your group\u002Fcompany standards.  Clicking on particular rules\u002Fwarnings allows you to drill directly to the code\u002Fproblem identified.  There is no hunting-pecking and trying to figure out what it thinks is incorrect.",[16,12129,12130],{},[1139,12131,12133],{"href":12132},"\u002Farticles\u002Fimages\u002Fimage_636986200296582570.png",[156,12134],{"style":10380,"title":158,"src":12135,"alt":158,"width":12136,"height":12137,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636986200298017103.png",453,236,[16,12139,12140,12141,12143],{},"Honestly, it is addictive to review the issues found and try to wipe them out.  Using this tool alongside Reharper R#\u002FCodeRush it is quite easy to generally clean up the solution.  Fixing issues, re-running the analysis just to find fewer identified issues is very satisfying.",[1118,12142],{},"\nI have not mentioned anything about the product’s ability to evaluate\u002Fwatch trends around code changes.  I hope to use this capability in the near future.  To be continued.",{"title":1080,"searchDepth":1081,"depth":1081,"links":12145},[],"2019-07-13T13:07:09.892Z","NDepend static code analysis tool that empowers .NET architects and developers to make informed decisions.  The tool estimates the Technical Debt evolution since the baseline.",{},"\u002Farticles\u002Fproduct-review-ndepend-part-1",{"title":12065,"description":12147},"articles\u002Fproduct-review-ndepend-part-1",[12153],"productreview","BJhDIovWrZxHjaHDGCQMsFdAZ4ogTimaF_mfyhNkV9I",{"id":12156,"title":12157,"author":1915,"body":12158,"createdAt":12192,"description":12193,"extension":1101,"img":12187,"meta":12194,"navigation":1104,"path":12195,"seo":12196,"stem":12197,"tags":12198,"updatedAt":12192,"__hash__":12199},"articles\u002Farticles\u002Fvisual-studio-themes.md","Visual Studio Themes",{"type":10,"value":12159,"toc":12190},[12160,12176,12179],[16,12161,12162,12163,12166,12169,12170,12173],{},"I have not been a fan historically of dark mode however recently I found this site ",[1139,12164],{"href":12165},"https:\u002F\u002Fgithub.com\u002Frainglow\u002Fvs",[1139,12167,12165],{"href":12165,"rel":12168},[3695]," which has 320+ Visual Studio (Not Vs Code @Code) .  You can preview themes here ",[1139,12171],{"href":12172},"http:\u002F\u002Fdaylerees.github.io\u002F",[1139,12174,12172],{"href":12172,"rel":12175},[3695],[16,12177,12178],{},"I am using one that looks like... and liking it very much (bit easier than vs.net oob dark mode)",[16,12180,12181],{},[1139,12182,12184],{"href":12183},"\u002Farticles\u002Fimages\u002Fimage_636961497088613233.png",[156,12185],{"style":12186,"title":158,"src":12187,"alt":158,"width":12188,"height":12189,"border":8404},"display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636961497090137940.png",642,304,{"title":1080,"searchDepth":1081,"depth":1081,"links":12191},[],"2019-06-14T22:55:09.108Z","Make Visual Studio yours, use themes to change the look and feel to meet your desires",{},"\u002Farticles\u002Fvisual-studio-themes",{"title":12157,"description":12193},"articles\u002Fvisual-studio-themes",[8526],"dXCAujKbTq5VbZD6mK7Cqb-0s_3y_nnjAU-TyuojtsA",{"id":12201,"title":12202,"author":1915,"body":12203,"createdAt":12257,"description":12258,"extension":1101,"img":12259,"meta":12260,"navigation":1104,"path":12261,"seo":12262,"stem":12263,"tags":12264,"updatedAt":12257,"__hash__":12265},"articles\u002Farticles\u002Fchange-default-global-installation-directory-for-nodejs-on-windows.md","Change default global installation directory for node.js on Windows",{"type":10,"value":12204,"toc":12255},[12205,12208,12211,12214,12217,12220,12223,12226,12229,12236,12239,12242],[16,12206,12207],{},"Within companies often Anti-Virus (AV) can impact the installation process of common\u002Frecent npm modules.  EPERM errors can occur during the npm -g installation process indicating that there are conflicts between the AV scanning process and the installation. ",[16,12209,12210],{},"The default location for node modules has generally been a sensitive directory for AV software %appdata% and can be locked down.    Node Installation",[16,12212,12213],{},"Node will install itself to this directory on your Windows PC C:\\Program Files\\nodejs\\node_modules\\npm",[16,12215,12216],{},"Following path will be added to the PATH variable C:\\Program Files\\nodejs\\",[16,12218,12219],{},"Within this directory is a npmrc file with the following PREFIX default prefix=${APPDATA}\\npm    Changing the default location of node_modules",[16,12221,12222],{},"You can determine the current node default directory by executing npm config get prefix (you can run this after your following update)",[16,12224,12225],{},"Open the npmrc file located in C:\\Program Files\\nodejs directory.",[16,12227,12228],{},"Default value prefix=${APPDATA}\\npm  which converts to C:\\Users{username}\\AppData\\Roaming\\npm directory.",[16,12230,12231,12232,12235],{},"Change the prefix value to your new custom location i.e. prefix=c:\\npm      * ",[19,12233,12234],{},"ALSO"," –>",[16,12237,12238],{},"Change the existing PATH variable from c:\\Users{username}\\AppData\\Roaming\\npm to c:\\npm (Right click on This PC, Advanced Tab, Environment Variables, Select Path in the list and Edit, find the existing npm path and change it)",[16,12240,12241],{},"Alternative to changing the npmrc file manually",[16,12243,12244,12245,12247,12248,12250,12251],{},"npm config set prefix c:\\npm",[1118,12246],{},"\nnpm config set cache c:\\npm-cache",[1118,12249],{},"\nWindows System Path can be edited via ",[1139,12252,12254],{"href":12253,"target":1142},"http:\u002F\u002Fwww.rapidee.com\u002Fen\u002Fabout","RapidEE",{"title":1080,"searchDepth":1081,"depth":1081,"links":12256},[],"2019-03-16T15:27:17.345Z","Change the default global location for installation of npm packages, cache etc.","\u002Farticles\u002Fimages\u002Fnode.png",{},"\u002Farticles\u002Fchange-default-global-installation-directory-for-nodejs-on-windows",{"title":12202,"description":12258},"articles\u002Fchange-default-global-installation-directory-for-nodejs-on-windows",[6989],"Hxu8wBevT7-sY8OwgP_bylX4WIRcsDQVSc2j9oAVKu4",{"id":12267,"title":12268,"author":1915,"body":12269,"createdAt":12300,"description":12301,"extension":1101,"img":1915,"meta":12302,"navigation":1104,"path":12303,"seo":12304,"stem":12305,"tags":12306,"updatedAt":12300,"__hash__":12307},"articles\u002Farticles\u002Fsql-server-reporting-services-ssrs-how-to-open-ssrs-project.md","SQL Server Reporting Services (SSRS)–How to open SSRS Project",{"type":10,"value":12270,"toc":12298},[12271,12274,12277],[16,12272,12273],{},"When you're trying to open your SSIS or SSRS solution, you will get a message that the migration has failed or\n'The application which this project type is based on was not found.'",[16,12275,12276],{},"You can open rptproj files with Visual Studio 2017 with an extension.  Follow the following steps to get going.",[48,12278,12279,12282,12285,12292,12295],{},[51,12280,12281],{},"Open ‘Microsoft Visual Studio 2017‘.",[51,12283,12284],{},"In the menu bar, expand ‘Tools‘, then choose ‘Extensions & Updates‘. to install an extension.",[51,12286,12287,12288,12291],{},"Search for ‘",[19,12289,12290],{},"Microsoft Reporting Services Projects","‘, and install this extension.",[51,12293,12294],{},"To complete the installation, shut down all windows and instances of Microsoft Visual Studio 2017. Then the installer will start.",[51,12296,12297],{},"Try to open your solution or projects (*.rptproj) again.",{"title":1080,"searchDepth":1081,"depth":1081,"links":12299},[],"2019-03-03T21:18:35.918Z","Ever try to open an older SQL Server Reporting Services (SSRS) project and do not know what product it opens with?  SSRS and how to add\u002Fmanage reports always seems to be a problem.  Well, Visual Studio 2017 has an extension that you can use to open the older rptproj files.  Give it a go.",{},"\u002Farticles\u002Fsql-server-reporting-services-ssrs-how-to-open-ssrs-project",{"title":12268,"description":12301},"articles\u002Fsql-server-reporting-services-ssrs-how-to-open-ssrs-project",[8743,8994],"mikQhQ-Cqxon8GSkXwjPOgBtZoZDTnq6qSx9SMWr80o",{"id":12309,"title":12310,"author":1915,"body":12311,"createdAt":12341,"description":12342,"extension":1101,"img":12336,"meta":12343,"navigation":1104,"path":12344,"seo":12345,"stem":12346,"tags":12347,"updatedAt":12341,"__hash__":12348},"articles\u002Farticles\u002Fmultiple-solution-explorer-tools-visual-studio-extension.md","Multiple Solution Explorer Tools–Visual Studio Extension",{"type":10,"value":12312,"toc":12339},[12313,12316,12323,12326,12329],[16,12314,12315],{},"This is a must-have for your Visual Studio 2017 and 2019.",[16,12317,12318],{},[1139,12319,12322],{"href":12320,"target":1142,"rel":12321},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=misaz.multiplesolutionexplorertools",[6921],"Multiple Solution Explorer Tools",[16,12324,12325],{},"This extension mainly makes scoped Solution Explore view (create by New Solution Explorer View in context menu in Solution Explorer) persistent across solution unload and load (ie. it saves state when Visual Studio shutdown and restores it when solution is opened next time). It allows you to rename solution explorer view so you can easily distinguish it.",[16,12327,12328],{},"It allows you to create multiple solution explorer windows, rename them AND best of all you can close Studio and re-open, and it remembers your settings.",[16,12330,12331],{},[1139,12332,12334],{"href":12333},"\u002Farticles\u002Fimages\u002Fimage_636839483796186628.png",[156,12335],{"style":1145,"title":158,"src":12336,"alt":158,"width":12337,"height":12338},"\u002Farticles\u002Fimages\u002Fimage_thumb_636839483797297446.png",160,399,{"title":1080,"searchDepth":1081,"depth":1081,"links":12340},[],"2019-01-24T17:39:39.809Z","This extension mainly makes scoped Solution Explore view (create by New Solution Explorer View in context menu in Solution Explorer) persistent across solution unload and load (ie. it saves state when Visual Studio shutdown and restores it when solution is opened next time).  Definitely a must have!",{},"\u002Farticles\u002Fmultiple-solution-explorer-tools-visual-studio-extension",{"title":12310,"description":12342},"articles\u002Fmultiple-solution-explorer-tools-visual-studio-extension",[8526],"9vW9DawB66Pk-Z5BJTPAmcJ9KezrCWHX1ISmdlCpLJg",{"id":12350,"title":12351,"author":1915,"body":12352,"createdAt":12435,"description":12436,"extension":1101,"img":12366,"meta":12437,"navigation":1104,"path":12438,"seo":12439,"stem":12440,"tags":12441,"updatedAt":12435,"__hash__":12442},"articles\u002Farticles\u002Fattaching-to-net-debugger-wvisual-studio-aspnet-core.md","Attaching to .NET Debugger w\u002FVisual Studio ASP.NET Core",{"type":10,"value":12353,"toc":12433},[12354,12357,12376,12379,12383,12386,12389,12399,12402,12411,12414,12423],[16,12355,12356],{},"Attaching from within Visual Studio to the dotnet.exe process Debug – Attach to Process",[13,12358,10274,12359,10274,12368,10274],{},[1139,12360,12362],{"href":12361},"\u002Farticles\u002Fimages\u002Fimage_thumb3_636794037223872773.png",[156,12363],{"style":12364,"title":12365,"src":12366,"alt":12365,"width":12367,"height":8473,"border":8404},"margin: 0px; border: 0px currentcolor; display: inline; background-image: none;","image_thumb3","\u002Farticles\u002Fimages\u002Fimage_thumb3_thumb_636794037227151161.png",166,[1139,12369,12371],{"href":12370},"\u002Farticles\u002Fimages\u002Fimage_thumb4_636794037229825895.png",[156,12372],{"style":10380,"title":12373,"src":12374,"alt":12373,"width":8473,"height":12375,"border":8404},"image_thumb4","\u002Farticles\u002Fimages\u002Fimage_thumb4_thumb_636794037232542538.png",174,[13,12377,12378],{},"  \nThis works fine, however to me seems too many clicks\u002Fsteps to do efficiently.  \n",[1139,12380,12382],{"href":12381},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=arcticdev.AnotherAttachToAny","AnotherAttachToAny",[16,12384,12385],{},"Once installed, I then set keystroke shortcut keys to execute the above steps.  This is how it is currently configured to me.  You can see I have Alt-A setup to immediately attach to the w3process (IIS), and Alt-D attaches to dotnet.exe. ",[16,12387,12388],{},"This is one keystroke to attach to the running process and any breakpoints within my .net code are hit and I can then step through.",[16,12390,12391],{},[1139,12392,12394],{"href":12393},"\u002Farticles\u002Fimages\u002Fimage_636794037234623240.png",[156,12395],{"style":12396,"title":158,"src":12397,"alt":158,"width":8473,"height":12398,"border":8404},"margin: 0px; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636794037237173898.png",62,[16,12400,12401],{},"Configuration of this extension is done through Tools – Options – Another Attach To Any",[16,12403,12404],{},[1139,12405,12407],{"href":12406},"\u002Farticles\u002Fimages\u002Fimage_636794037240524929.png",[156,12408],{"style":12396,"title":158,"src":12409,"alt":158,"width":8473,"height":12410,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636794037243711700.png",193,[16,12412,12413],{},"Setting up a keystroke to one of the above commands is done through Tools – Options – Keyboard",[16,12415,12416],{},[1139,12417,12419],{"href":12418},"\u002Farticles\u002Fimages\u002Fimage_636794037246961946.png",[156,12420],{"style":12396,"title":158,"src":12421,"alt":158,"width":8473,"height":12422,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636794037249700449.png",191,[16,12424,12425,12426],{},"This single extension has saved me hundreds of hours ",[156,12427],{"className":12428,"src":12431,"alt":12432},[12429,12430],"wlEmoticon","wlEmoticon-smile","\u002Farticles\u002Fimages\u002FwlEmoticon-smile_636794037251738341.png","Smile",{"title":1080,"searchDepth":1081,"depth":1081,"links":12434},[],"2018-12-03T03:15:25.405Z","You have a website up and running, and now you want to connect the Visual Studio Debugger.  This is often the case if you do not start with F5 - Debug to start the browser and automatically attach to the .net debugger.  In reality, I almost never push F5.  Instead, I attach to the debugger on the fly with the approach below.  Take a moment to check it out.",{},"\u002Farticles\u002Fattaching-to-net-debugger-wvisual-studio-aspnet-core",{"title":12351,"description":12436},"articles\u002Fattaching-to-net-debugger-wvisual-studio-aspnet-core",[10632,8994,8526],"Nscy8wnaq8s7ro0UwOm6dGcZvHofFD7TMOQpO4pRHZs",{"id":12444,"title":12445,"author":1915,"body":12446,"createdAt":12594,"description":12595,"extension":1101,"img":12563,"meta":12596,"navigation":1104,"path":12597,"seo":12598,"stem":12599,"tags":12600,"updatedAt":12594,"__hash__":12601},"articles\u002Farticles\u002Fvue-app-and-mvc-routing-wvisual-studio-aspnet-core.md","Vue App and MVC Routing w\u002FVisual Studio ASP.NET Core",{"type":10,"value":12447,"toc":12592},[12448,12451,12454,12460,12466,12480,12497,12524,12537,12586,12589],[16,12449,12450],{},"###What page is loaded on starting the application.",[16,12452,12453],{},"The default route for this VS.NET ASP.NET Core application is the public\u002Findex.html with the following setup in the Startup.cs",[16,12455,12456,12457,12459],{},"app.UseSpa(spa => { ",[1118,12458],{}," spa.Options.SourcePath = \"ClientApp\";",[16,12461,12462,12463,12465],{}," if (env.IsDevelopment()) ",[1118,12464],{}," {",[16,12467,12468,12469,12471,12472,11776,12474,12476,12477,12479],{}," \u002F\u002F run npm process with client app ",[1118,12470],{}," spa.UseVueCli(npmScript: \"serve\", port: 8080); ",[1118,12473],{},[1118,12475],{}," } ",[1118,12478],{}," }); ",[16,12481,12482,12485,12486,8216,12489,12492,12493,12496],{},[19,12483,12484],{},"If you have"," a HomeController and a Views\u002FHome\u002FIndex.cshtml view, \nwhen the application starts via F5 it will route by default to http:\u002F\u002Flocalhost:50557 ",[19,12487,12488],{},"or",[1139,12490,12491],{"href":12491},"http:\u002F\u002Flocalhost:50557\u002Findex.html"," and if you want to navigate to your controller\u002Fview you can navigate to \n",[1139,12494,12495],{"href":12495},"http:\u002F\u002Flocalhost:50557\u002FHome\u002FIndex"," Essentially it will default to the vue index.html page in this scenario.",[13,12498,12499,12509,12512],{},[16,12500,12501],{},[1139,12502,12504],{"href":12503},"\u002Farticles\u002Fimages\u002Fimage_thumb[1]_636791382475500953.png",[156,12505],{"style":12364,"title":12506,"src":12507,"alt":12506,"width":8473,"height":12508,"border":8404},"image_thumb[1]","\u002Farticles\u002Fimages\u002Fimage_thumb[1]_thumb_636791382476448208.png",141,[16,12510,12511],{},"Navigating to http:\u002F\u002Flocalhost:50557\u002Fhome\u002Findex will navigate to the MVC view, however if you want this route to navigate the vue app you can add, \nwhich would redirect the user from the MVC view to the vue app again.",[16,12513,12514,12515,12517,12518,12520,12521,12523],{},"public IActionResult Index() ",[1118,12516],{}," { ",[1118,12519],{}," return Redirect(\"~\u002Findex.html\"); ",[1118,12522],{}," }",[16,12525,12526,12528,12529,12532,12533,12536],{},[19,12527,12484],{}," a HomeController ",[19,12530,12531],{},"AND ","and you add ",[19,12534,12535],{},"MapSpaFallbackRoute"," reference within the Startup.cs similar to the following, starting via F5 the site will navigate to http:\u002F\u002Flocalhost:50557\u002F and land on the Views\u002FHome\u002FIndex.cshtml This really is the reverse of the above scenario. In this case it will default to the MVC view and you have to explicitly navigate to the \u002Findex.html for the vue app.",[13,12538,12539,12551,12559,12569,12576],{},[16,12540,12541,12542,12544,12545,12547,12548,12550],{},"app.UseMvc(routes => { ",[1118,12543],{}," routes.MapRoute( ",[1118,12546],{}," name: \"default\", ",[1118,12549],{}," template: \"{controller}\u002F{action=Index}\u002F{id?}\");",[16,12552,11776,12553,11776,12556,12558],{},[19,12554,12555],{},"routes.MapSpaFallbackRoute(\"spa-fallback\", new { controller = \"Home\", action = \"Index\" });",[1118,12557],{},"});",[16,12560,12561],{},[1139,12562,12564],{"href":12563},"\u002Farticles\u002Fimages\u002Fimage_thumb[2]_636791382477200018.png",[156,12565],{"style":12364,"title":12566,"src":12567,"alt":12566,"width":8473,"height":12568,"border":8404},"image_thumb[2]","\u002Farticles\u002Fimages\u002Fimage_thumb[2]_thumb_636791382477864407.png",74,[16,12570,12571,12572,12575],{},"If you want to navigate to your vue app, you must ",[19,12573,12574],{},"explicitly"," reference http:\u002F\u002Flocalhost:50557\u002FIndex.html Any invalid routes will default to the Home\u002FIndex view.",[16,12577,12578],{},[1139,12579,12581],{"href":12580},"https:\u002F\u002Fwww.davidyardy.com\u002FPosts\u002Ffiles\u002Fimage_thumb[3]_636791382478902143.png",[156,12582],{"style":12364,"title":12583,"src":12584,"alt":12583,"width":8473,"height":12585,"border":8404},"image_thumb[3]","\u002Farticles\u002Fimages\u002Fimage_thumb[3]_thumb_636791382479671548.png",126,[16,12587,12588],{},"There are a number of combinations and can be confusing. \n",[16,12590,12591],{},"Primarily, both the vue app and MVC navigation work fine. It really just depends on if you want the MVC to be the default route, or the vue app index.html page.",{"title":1080,"searchDepth":1081,"depth":1081,"links":12593},[],"2018-11-30T01:30:48.068Z","Vue.js SPA routing conflicts with MVC routing.  Short article reviewing the options, and an approach on how to get both working nicely together.",{},"\u002Farticles\u002Fvue-app-and-mvc-routing-wvisual-studio-aspnet-core",{"title":12445,"description":12595},"articles\u002Fvue-app-and-mvc-routing-wvisual-studio-aspnet-core",[8356,10632],"up2a1CH7j5uH_V7CzCVaVuAZueA1QSdo_Obd_kNIwWU",{"id":12603,"title":12604,"author":1915,"body":12605,"createdAt":12862,"description":12609,"extension":1101,"img":12799,"meta":12863,"navigation":1104,"path":12864,"seo":12865,"stem":12866,"tags":12867,"updatedAt":12862,"__hash__":12868},"articles\u002Farticles\u002Fstarting-a-vue-app-wvisual-studio-aspnet-core-2.md","Starting a Vue App w\u002FVisual Studio ASP.NET Core 2",{"type":10,"value":12606,"toc":12860},[12607,12610,12613,12679,12692,12695,12739,12752,12782,12791,12801,12804,12807,12826,12829,12843,12846,12855,12858],[16,12608,12609],{},"I created my Vue project, included it with my ASP.NET Core project.  For more information reference my prior post on Vue with ASP.NET Core.",[16,12611,12612],{},"Significant to how the project starts\u002Fruns is the setup within Startup.cs",[2232,12614,12616],{"className":9998,"code":12615,"language":10000,"meta":1080,"style":1080},"app.UseSpa(spa => {    \n    spa.Options.SourcePath =  \"ClientApp \";      \n    if (env.IsDevelopment())          \n    {              \n    \u002F\u002Fspa.UseReactDevelopmentServer(npmScript:  \"start \");          \n    \u002F\u002F run npm process with client app             \n    \u003Cstrong>spa.UseVueCli(npmScript:  \"serve \", port: 8080);\u003C\u002Fstrong>          \n    \u002F\u002F if you just prefer to proxy requests from client app, use proxy to SPA dev server instead, \u002F\u002F app should be already running before starting a .NET client:              \n    \u002F\u002F spa.UseProxyToSpaDevelopmentServer( \"\u003Ca href=\"http:\u002F\u002Flocalhost:8080 \");\">http:\u002F\u002Flocalhost:8080 \");\u003C\u002Fa> \n    \u002F\u002F your Vue app port\n    }\n});\n",[2239,12617,12618,12623,12628,12633,12638,12643,12648,12653,12661,12666,12671,12675],{"__ignoreMap":1080},[4215,12619,12620],{"class":4217,"line":4218},[4215,12621,12622],{},"app.UseSpa(spa => {    \n",[4215,12624,12625],{"class":4217,"line":1081},[4215,12626,12627],{},"    spa.Options.SourcePath =  \"ClientApp \";      \n",[4215,12629,12630],{"class":4217,"line":1084},[4215,12631,12632],{},"    if (env.IsDevelopment())          \n",[4215,12634,12635],{"class":4217,"line":4234},[4215,12636,12637],{},"    {              \n",[4215,12639,12640],{"class":4217,"line":4240},[4215,12641,12642],{},"    \u002F\u002Fspa.UseReactDevelopmentServer(npmScript:  \"start \");          \n",[4215,12644,12645],{"class":4217,"line":4246},[4215,12646,12647],{},"    \u002F\u002F run npm process with client app             \n",[4215,12649,12650],{"class":4217,"line":4252},[4215,12651,12652],{},"    \u003Cstrong>spa.UseVueCli(npmScript:  \"serve \", port: 8080);\u003C\u002Fstrong>          \n",[4215,12654,12655,12658],{"class":4217,"line":4258},[4215,12656,12657],{},"    \u002F\u002F if you just prefer to proxy requests from client app, use proxy to SPA dev server instead,",[4215,12659,12660],{}," \u002F\u002F app should be already running before starting a .NET client:              \n",[4215,12662,12663],{"class":4217,"line":4264},[4215,12664,12665],{},"    \u002F\u002F spa.UseProxyToSpaDevelopmentServer( \"\u003Ca href=\"http:\u002F\u002Flocalhost:8080 \");\">http:\u002F\u002Flocalhost:8080 \");\u003C\u002Fa> \n",[4215,12667,12668],{"class":4217,"line":4270},[4215,12669,12670],{},"    \u002F\u002F your Vue app port\n",[4215,12672,12673],{"class":4217,"line":4276},[4215,12674,7437],{},[4215,12676,12677],{"class":4217,"line":4282},[4215,12678,5414],{},[16,12680,12681,12682,12685,12686,12689],{},"Now, I can start my project with the following approaches (referencing Properties\u002FlaunchSettings.json)  Regardless of how the project is started, we are taking advantage of vue dev server and the hot module reloading feature (i.e. the ability to modify html, js, vue code and the page will auto re-load)     * Visual Studio F5 (debug-run) (",[19,12683,12684],{},"selecting"," the application name) ",[1139,12687],{"href":12688},"http:\u002F\u002Flocalhost:8081",[1139,12690,12688],{"href":12688,"rel":12691},[3695],[16,12693,12694],{},"This approach starts the project with the c# debugger attached.",[2232,12696,12698],{"className":9998,"code":12697,"language":10000,"meta":1080,"style":1080},"\"aspnetcorevueappGui \": {               \n        \"commandName \":  \"Project \",               \n        \"launchBrowser \": true,               \n        \"environmentVariables \": {                 \n            \"ASPNETCORE_ENVIRONMENT \":  \"Development \"              \n        },               \n        \"applicationUrl \":  \"\u003Ca href=\"https:\u002F\u002Flocalhost:5001;http:\u002F\u002Flocalhost:5000 \"\">https:\u002F\u002Flocalhost:5001;http:\u002F\u002Flocalhost:5000 \"\u003C\u002Fa>          \n}\n",[2239,12699,12700,12705,12710,12715,12720,12725,12730,12735],{"__ignoreMap":1080},[4215,12701,12702],{"class":4217,"line":4218},[4215,12703,12704],{},"\"aspnetcorevueappGui \": {               \n",[4215,12706,12707],{"class":4217,"line":1081},[4215,12708,12709],{},"        \"commandName \":  \"Project \",               \n",[4215,12711,12712],{"class":4217,"line":1084},[4215,12713,12714],{},"        \"launchBrowser \": true,               \n",[4215,12716,12717],{"class":4217,"line":4234},[4215,12718,12719],{},"        \"environmentVariables \": {                 \n",[4215,12721,12722],{"class":4217,"line":4240},[4215,12723,12724],{},"            \"ASPNETCORE_ENVIRONMENT \":  \"Development \"              \n",[4215,12726,12727],{"class":4217,"line":4246},[4215,12728,12729],{},"        },               \n",[4215,12731,12732],{"class":4217,"line":4252},[4215,12733,12734],{},"        \"applicationUrl \":  \"\u003Ca href=\"https:\u002F\u002Flocalhost:5001;http:\u002F\u002Flocalhost:5000 \"\">https:\u002F\u002Flocalhost:5001;http:\u002F\u002Flocalhost:5000 \"\u003C\u002Fa>          \n",[4215,12736,12737],{"class":4217,"line":4258},[4215,12738,9887],{},[16,12740,12741,12742,12746,12749,12751],{},"*Visual Studio F5 (debug-run) (selecting IIS Express, browser by default navigates to ",[1139,12743],{"title":12744,"href":12745},"http:\u002F\u002Flocalhost:50557\u002F","http:\u002F\u002Flocalhost:50557",[1139,12747,12745],{"href":12745,"rel":12748},[3695],[1118,12750],{},"\nThis approach starts the project with the c# debugger attached.   ",[13,12753,12754],{},[16,12755,12756,12757,12759,12760,12762,12763,12765,12766,12768,12769,12773,12774,12776,12777,12032,12779,12781],{},"\"iisSettings\": {",[1118,12758],{},"\n\"windowsAuthentication\": false,",[1118,12761],{},"\n\"anonymousAuthentication\": true,",[1118,12764],{},"\n\"iisExpress\": {",[1118,12767],{},"\n\"applicationUrl\":  \"\u003Ca href=\"",[1139,12770,12772],{"rel":12771},[3695],"http:\u002F\u002Flocalhost:50557\"\">http:\u002F\u002Flocalhost:50557"," \",",[1118,12775],{},"\n\"sslPort \": 0",[1118,12778],{},[1118,12780],{},"\n} ",[16,12783,12784,12785,12787,12790],{},"*npm run serve from a command prompt\u002Fterminal window and opening browser to ",[1139,12786],{"href":8205},[1139,12788,8205],{"href":8205,"rel":12789},[3695],"  The c# debugger is not attached, however I will show how to attach to the dotnet.exe process below.  The port used is defined within Startup.cs spa.UseVueCli(npmScript:  \"serve \", port: 8080);   ",[13,12792,12793,12794,11776],{},"   ",[1139,12795,12797],{"href":12796},"\u002Farticles\u002Fimages\u002Fimage_636789550424336824.png",[156,12798],{"title":158,"style":12396,"border":8404,"alt":158,"src":12799,"width":8473,"height":12800},"\u002Farticles\u002Fimages\u002Fimage_thumb_636789550425217823.png",98,[1139,12802],{"href":12803},"http:\u002F\u002Flocalhost:8080\u002F",[1139,12805,12803],{"href":12803,"rel":12806},[3695],[16,12808,12809,12810,12812,12818,12819],{},"The c# debugger is not attached, however I will show how to attach to the dotnet.exe process below.  The port used is defined within Startup.cs spa.UseVueCli(npmScript:  \"serve \", port: 8080);",[1118,12811],{},[1139,12813,12815],{"href":12814},"\u002Farticles\u002Fimages\u002Fimage_636789550425931758.png",[156,12816],{"title":158,"style":12396,"border":8404,"alt":158,"src":12817,"width":8473,"height":4475},"\u002Farticles\u002Fimages\u002Fimage_thumb_636789550426691621.png","        ",[1139,12820,12822],{"href":12821},"\u002Farticles\u002Fimages\u002Fimage_636789550427600206.png",[156,12823],{"title":158,"style":12396,"border":8404,"alt":158,"src":12824,"width":8473,"height":12825},"\u002Farticles\u002Fimages\u002Fimage_thumb_636789550428370970.png",168,[16,12827,12828],{},"Attaching from within Visual Studio to the dotnet.exe process Debug – Attach to Process  ",[13,12830,12793,12831,11983,12837,11776],{},[1139,12832,12834],{"href":12833},"\u002Farticles\u002Fimages\u002Fimage_636789550429079347.png",[156,12835],{"title":158,"style":12396,"border":8404,"alt":158,"src":12836,"width":12367,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636789550430063451.png",[1139,12838,12840],{"href":12839},"\u002Farticles\u002Fimages\u002Fimage_636789550431090218.png",[156,12841],{"title":158,"style":12396,"border":8404,"alt":158,"src":12842,"width":8473,"height":12375},"\u002Farticles\u002Fimages\u002Fimage_thumb_636789550431817517.png",[16,12844,12845],{},"So there are a few ways of starting your web application and debugging.",[16,12847,12848,12849,12851,12852,12854],{},"If you use one of the F5 approaches (above) the debugger is automatically attached, and you can step through your code as you browse\nthrough the application.  If you use F5 you can stop debugging easily by just stopping within Visual Studio the debugger.",[1118,12850],{},"\nIf you start the application from a terminal\u002Fcommand prompt window the .NET debugger is not attached however you can attach to the dotnet.exe process when you are interested in stepping into your c# .net code.",[1118,12853],{},"\nPersonally, I never use F5 and rely on attaching the process when I want to narrow my debugging experience manually.",[16,12856,12857],{},"I code this way, as I can modify c#, build the project then simply just refresh my open browser to start using the updated dlls from the project.  Once the vue app is running, hot module loading is up and running.  Changes to html and js files within the ClientApp directory are automatically loaded when the Vue CLI recognizes a file change.  This is known as HMR (hot module reloading).  All new js frameworks have an implementation of this.  It is part of the new modern js framework world now.  The root file for the web application is public\u002Findex.html.",[4682,12859,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":12861},[],"2018-11-27T22:37:23.276Z",{},"\u002Farticles\u002Fstarting-a-vue-app-wvisual-studio-aspnet-core-2",{"title":12604,"description":12609},"articles\u002Fstarting-a-vue-app-wvisual-studio-aspnet-core-2",[8356,10632],"vqGHUOh8tLLRV4bB39lZjIFEZF5X69F042wi9PFYnnI",{"id":12870,"title":12871,"author":1915,"body":12872,"createdAt":13272,"description":12876,"extension":1101,"img":12884,"meta":13273,"navigation":1104,"path":13274,"seo":13275,"stem":13276,"tags":13277,"updatedAt":13272,"__hash__":13278},"articles\u002Farticles\u002Fgetting-started-vuejs-wvisual-studio-aspnet-core-1.md","Getting Started Vue.js w\u002FVisual Studio ASP.NET Core 1",{"type":10,"value":12873,"toc":13270},[12874,12877,12894,12897,12908,12922,12931,12934,12943,12975,12977,12991,13003,13013,13035,13058,13085,13088,13094,13114,13141,13207,13212,13224],[16,12875,12876],{},"So starting this off, looking for a Vue.js SPA template within Visual Studio…nope not available.\nUsing command line dotnet new –l you can see it is not within the template package from Microsoft.",[16,12878,12879,12886,12887],{},[1139,12880,12882],{"href":12881},"\u002Farticles\u002Fimages\u002Fimage_636783176934907896.png",[156,12883],{"title":158,"style":12186,"border":8404,"alt":158,"src":12884,"width":8420,"height":12885},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176935948243.png",246,"     ",[1139,12888,12890],{"href":12889},"\u002Farticles\u002Fimages\u002Fimage_636783176936835671.png",[156,12891],{"title":158,"style":12186,"border":8404,"alt":158,"src":12892,"width":8473,"height":12893},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176937616708.png",195,[16,12895,12896],{},"Second attempt, is to get the latest template solutions from Microsoft using the following command from a dos prompt.",[16,12898,12899,12900,12904,12907],{},"dotnet new --install ",[1139,12901,12903],{"href":12902},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FMicrosoft.AspNetCore.SpaTemplates\u002F","microsoft.aspnetcore.spatemplates",[19,12905,12906],{},"Unfortunately",", the Vue templates are not available within this package (unlike React and Angular templates).",[16,12909,12910,12913,12914,12918,12919,12921],{},[9125,12911,12912],{},"Building our own Vue Template","  I am going to build one up using existing templates from Microsoft and Visual Studio with the new\n",[1139,12915,12917],{"href":12916},"https:\u002F\u002Fcli.vuejs.org\u002F","Vue CLI 3"," templating system. Starting off install the vue cli globally on your pc.",[1118,12920],{},"\nnpm list –g --depth 0 (to list all globally install packages, depth argument says to list only the top packages not the dependencies)",[16,12923,12924],{},[1139,12925,12927],{"href":12926},"\u002Farticles\u002Fimages\u002Fimage_636783176938295748.png",[156,12928],{"title":158,"style":12396,"border":8404,"alt":158,"src":12929,"width":8473,"height":12930},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176939127447.png",106,[16,12932,12933],{},"I have already installed vue cli however doing it again you can see vue was updated from 3.0.1 to 3.1.1    npm install –g @vue\u002Fcli",[16,12935,12936],{},[1139,12937,12939],{"href":12938},"\u002Farticles\u002Fimages\u002Fimage_636783176939865053.png",[156,12940],{"title":158,"style":12396,"border":8404,"alt":158,"src":12941,"width":8473,"height":12942},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176940599977.png",125,[16,12944,12945,12946,12954,12955,12963,12964,12970,12972],{},"Vue CLI sets up a project with features: hot module replacement, tree-shaking, code-splitting, webpack 4 etc. node –v will display the version of node installed, likewise vue --version gives us the vue.js installed. With vue 3 cli we can use the CLI to create a project or a GUI to set it up.  Using the CLI first, we will create a asp.net core solution based on the existing react template.  dotnet new react –o aspnet-core-vue-app (this is the same as File-New Project within VS.NET and choosing the react template)  ",[1139,12947,12949],{"href":12948},"\u002Farticles\u002Fimages\u002Fimage_636783176941282020.png",[156,12950],{"title":158,"style":12186,"border":8404,"alt":158,"src":12951,"width":12952,"height":12953},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176942157272.png",288,81,"  Opening the csproj with vs.net (Open Project), and building the project to restore nuget packages, and restoring npm packages (taking several minutes)    ",[1139,12956,12958],{"href":12957},"\u002Farticles\u002Fimages\u002Fimage_636783176942942110.png",[156,12959],{"title":158,"style":12186,"border":8404,"alt":158,"src":12960,"width":12961,"height":12962},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176943756200.png",197,187,"  Make the following changes within Startup.cs    configuration.RootPath = 'ClientApp\u002Fbuild'; => configuration.RootPath = 'ClientApp\u002Fdist';     app.UseHttpsRedirection(); => \u002F\u002F app.UseHttpsRedirection(); comment out (we do not want to deal with https certificates at this moment)  Add nuget package VueClieMiddleware  ",[1139,12965,12967],{"href":12966},"\u002Farticles\u002Fimages\u002Fimage_636783176944675747.png",[156,12968],{"title":158,"style":12396,"border":8404,"alt":158,"src":12969,"width":8473,"height":4452},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176945464707.png",[1118,12971],{},[1139,12973],{"href":12974},"\u002Farticles\u002Fimages\u002Fimage_636783176946236903.png",[1139,12976],{"href":12974},[16,12978,12979,12985,12987,12988,12990],{},[1139,12980,12981],{"href":12974},[156,12982],{"title":158,"style":12396,"border":8404,"alt":158,"src":12983,"width":12984,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176947064497.png",241,[1118,12986],{},"\n\u002F\u002F spa.UseReactDevelopmentServer(npmScript: 'start'); comment out react development server and reference vue",[1118,12989],{},"\nspa.UseVueCli(npmScript: 'serve', port: 8080);",[16,12992,12993,12994,12996,12997,12999,13000,13002],{},"Remove all the contents of the \u002FClientApp foler and create a new project using Vue CLI and returning to command prompt in a new directory",[1118,12995],{},"\nmd vue",[1118,12998],{},"\ncd vue",[1118,13001],{},"\nvue create client-app",[16,13004,13005],{},[1139,13006,13008],{"href":13007},"\u002Farticles\u002Fimages\u002Fimage_636783176947910505.png",[156,13009],{"title":158,"style":12186,"border":8404,"alt":158,"src":13010,"width":13011,"height":13012},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176948670926.png",388,116,[16,13014,13015,13016,13018,13026,13028],{},"selecting with mouse default (babel, eslint)",[1118,13017],{},[1139,13019,13021],{"href":13020},"\u002Farticles\u002Fimages\u002Fimage_636783176949582507.png",[156,13022],{"title":158,"style":12186,"border":8404,"alt":158,"src":13023,"width":13024,"height":13025},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176950311914.png",390,92,[1118,13027],{},[1139,13029,13031],{"href":13030},"\u002Farticles\u002Fimages\u002Fimage_636783176951069191.png",[156,13032],{"title":158,"style":12186,"border":8404,"alt":158,"src":13033,"width":13034,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176951855897.png",397,[16,13036,13037,13038,13045,13053,13054,13057],{},"Moving all the Vue CLI code now to the VS.NET folder ClientApp. I am using Visual Studio in this tutorial (not vscode).  ",[1139,13039,13041],{"href":13040},"\u002Farticles\u002Fimages\u002Fimage_636783176952644959.png",[156,13042],{"title":158,"style":12396,"border":8404,"alt":158,"src":13043,"width":8473,"height":13044},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176953456238.png",104,[1139,13046,13048],{"href":13047},"\u002Farticles\u002Fimages\u002Fimage_636783176954088989.png",[156,13049],{"title":158,"style":12186,"border":8404,"alt":158,"src":13050,"width":13051,"height":13052},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176954863643.png",110,72,"  ",[9125,13055,13056],{},"3 ways to run this project","  1. Pressing F5 the application runs and to test the hot module reload feature, modify the Welcome message within App.vue while in Debug Mode (F5). You will notice the page reloads showing the change immediately. This is powerful.",[16,13059,13060,13061,13063,13064,13066,13067,13069,13070,13073,1200,13076,13078,13079,13081,13082],{},"2 If however I try to run the project via dotnet run I am getting the following error:",[1118,13062],{},"\nSystem.InvalidOperationException\nHResult=0x80131509",[1118,13065],{},"\nMessage=Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found.",[1118,13068],{},"\nTo generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.         For more information on configuring HTTPS see ",[1139,13071],{"href":13072},"https:\u002F\u002Fgo.microsoft.com\u002Ffwlink\u002F?linkid=848054",[1139,13074,13072],{"href":13072,"rel":13075},[3695],[1118,13077],{},"\nSource=Microsoft.AspNetCore.Server.Kestrel.Core",[1118,13080],{},"\nStackTrace:………….info: Microsoft.AspNetCore.SpaServices",[4215,13083,13084],{},"0",[16,13086,13087],{},"client-app@0.1.0 serve C:\\Temp\\vue\\aspnet-core-vue-app\\aspnet-core-vue-app\\ClientApp",[16,13089,13090,13091,13093],{},"vue-cli-service serve '--port' '8080'  INFO Starting development server...    The error message told me to run dotnet dev-certs https --clean",[1118,13092],{},"\nI tried but ended up with this error message",[16,13095,13096,13097,13099,13100,13102,13103,13105,13111,13113],{},"Cleaning HTTPS development certificates from the machine. A prompt might get displayed to confirm the removal of some of the certificates.",[1118,13098],{},"\nThere was an error trying to clean HTTPS development certificates on this machine.",[1118,13101],{},"\nSequence contains no matching element",[1118,13104],{},[1139,13106,13108],{"href":13107},"\u002Farticles\u002Fimages\u002Fimage_636783176955551263.png",[156,13109],{"title":158,"style":12396,"border":8404,"alt":158,"src":13110,"width":8473,"height":4371},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176956233921.png",[1118,13112],{},"\nI was able to eventually resolve this issue (later) by opening “Manage user certificates”, removing any certificates with friendly names like “ASP.NET Core HTTPS development certificate”. Apparently there was a corruption in my local certificates and removing all resolved it.",[16,13115,13116,13123,13124,13126,13132,13134,13135,13138,7815],{},[1139,13117,13119],{"href":13118},"\u002Farticles\u002Fimages\u002Fimage_636783176956890292.png",[156,13120],{"title":158,"style":12186,"border":8404,"alt":158,"src":13121,"width":13122,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176957562139.png",243,"  I did this under Certificates Current User – Personal > Certificates (sort by friendly name, select all and remove)  Trusted Root",[1118,13125],{},[1139,13127,13129],{"href":13128},"\u002Farticles\u002Fimages\u002Fimage_636783176958629353.png",[156,13130],{"title":158,"style":12396,"border":8404,"alt":158,"src":13131,"width":8473,"height":4429},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176959335403.png",[1118,13133],{},"\nOnce this was complete I re-ran the dotnet dev-certs https --trust per the error message, I was then prompted with ‘A confirmation prompt will be displayed if the certificate was not previously trusted. Click yes on the prompt to trust the certification’.. (Reference: ",[1139,13136],{"title":13137,"href":13137},"https:\u002F\u002Fgithub.com\u002Faspnet\u002FAspNetCore\u002Fissues\u002F3421",[1139,13139,13137],{"href":13137,"rel":13140},[3695],[16,13142,13143,13144,13146,13149,13150,13153,13154,13160,13161,13053,13168,13053,13174,12886,13181,13188,13189,13191,13192,13194,13195,13197,13200,13201,13203,13204,13206],{},"3 With a command prompt, cd to the ClientApp directory and npm run serve (after you can browse to the site via ",[1139,13145],{"href":8205},[1139,13147,8205],{"href":8205,"rel":13148},[3695]," as the on screen instructions provide)  ",[19,13151,13152],{},"Let’s do this again",", but instead of creating the vue app via the vue cli this time I will use the vue ui to build the vue app. Create another React application using the template within Visual Studio. Make the same modifications as above to the Startup.cs. Using vue ui command line and the browser based wizard create another vue app named ClientApp. When complete copy it to your Visual Studio project on top of the existing ClientApp folder.  ",[1139,13155,13157],{"href":13156},"\u002Farticles\u002Fimages\u002Fimage_636783176960052361.png",[156,13158],{"title":158,"style":12396,"border":8404,"alt":158,"src":13159,"width":8473,"height":4383},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176960663681.png","  A browser opens with the Vue GUI options  ",[1139,13162,13164],{"href":13163},"\u002Farticles\u002Fimages\u002Fimage_636783176961647957.png",[156,13165],{"title":158,"style":12396,"border":8404,"alt":158,"src":13166,"width":8473,"height":13167},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176962446700.png",97,[1139,13169,13171],{"href":13170},"\u002Farticles\u002Fimages\u002Fimage_636783176963253878.png",[156,13172],{"title":158,"style":12396,"border":8404,"alt":158,"src":13173,"width":8473,"height":4423},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176963995444.png",[1139,13175,13177],{"href":13176},"\u002Farticles\u002Fimages\u002Fimage_636783176964694200.png",[156,13178],{"title":158,"style":12396,"border":8404,"alt":158,"src":13179,"width":8473,"height":13180},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176965536783.png",94,[1139,13182,13184],{"href":13183},"\u002Farticles\u002Fimages\u002Fimage_636783176966230883.png",[156,13185],{"title":158,"style":12396,"border":8404,"alt":158,"src":13186,"width":8473,"height":13187},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176966867718.png",111,"  A vue app is created on the file system, which will be copied again to our Visual Studio project (on top of the ClientApp directory) that was the original React application. Build the project…. ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========  1. Pressing F5 to run the application, you can see within the Output – Debug window the operations…  Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager:Information: User profile is available. Using 'C:\\Users\\dyardy\\AppData\\Local\\ASP.NET\\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.",[1118,13190],{},"\nMicrosoft.AspNetCore.SpaServices:Information: Starting server on port 8080...",[1118,13193],{},"\nMicrosoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP\u002F1.1 DEBUG ",[1139,13196],{"href":12744},[1139,13198,12744],{"href":12744,"rel":13199},[3695]," 0",[1118,13202],{},"\nMicrosoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 32.0777ms 200",[1118,13205],{},"\nMicrosoft.AspNetCore.SpaServices:Information: > ClientApp@0.1.0 serve C:\\Temp\\vue\\aspnetcorevueappGui\\aspnetcorevueappGui\\aspnetcorevueappGui\\ClientApp",[13,13208,13209],{},[16,13210,13211],{},"vue-cli-service serve '--port' '8080'",[16,13213,13214,13215,13217,13218,13220,13221,13223],{},"INFO Starting development server...",[1118,13216],{},"\nMicrosoft.AspNetCore.SpaServices:Information: DONE Compiled successfully in 19505ms15:42:01",[1118,13219],{},"\nMicrosoft.AspNetCore.SpaServices:Information:",[1118,13222],{},"\nApp running at:",[48,13225,13226,13234],{},[51,13227,13228,13229,13231],{},"Local: ",[1139,13230],{"href":12803},[1139,13232,12803],{"href":12803,"rel":13233},[3695],[51,13235,13236,13237,13240,13243,13244,13246,13247,13253,13254,13258,13259,13262,13263,13266,13269],{},"Network: ",[1139,13238],{"href":13239},"http:\u002F\u002F192.168.1.101:8080\u002F",[1139,13241,13239],{"href":13239,"rel":13242},[3695],"    Note that the development build is not optimized.",[1118,13245],{},"\nMicrosoft.AspNetCore.SpaServices:Information: To create a production build, run npm run build.  ",[1139,13248,13250],{"href":13249},"\u002Farticles\u002Fimages\u002Fimage_636783176967988657.png",[156,13251],{"title":158,"style":12186,"border":8404,"alt":158,"src":13252,"width":8473,"height":4458},"\u002Farticles\u002Fimages\u002Fimage_thumb_636783176968671677.png","  The browser did open navigated to ",[1139,13255,13256],{"href":13256,"rel":13257},"https:\u002F\u002Flocalhost:50557\u002F",[3695]," changing this to ",[1139,13260,12745],{"href":12745,"rel":13261},[3695]," my new project opened up.  Also ",[1139,13264,11776],{"title":13265,"href":13265}," http:\u002F\u002Flocalhost:8080\u002F ",[1139,13267,12803],{"href":12803,"rel":13268},[3695],"  works well to.  Ok so that is the end of this initial getting started with Vue.js and ASP.NET Core. Primarily this was using templates from Visual Studio, with modification then relying on Vue.js CLI (command line and gui to build a new template based on vue.js).",{"title":1080,"searchDepth":1081,"depth":1081,"links":13271},[],"2018-11-20T13:34:57.003Z",{},"\u002Farticles\u002Fgetting-started-vuejs-wvisual-studio-aspnet-core-1",{"title":12871,"description":12876},"articles\u002Fgetting-started-vuejs-wvisual-studio-aspnet-core-1",[10632,8356],"gH7c2V4YNLNu8_InM5kss4Ft-n7nbDlOeseetV4SuU4",{"id":13280,"title":13281,"author":1915,"body":13282,"createdAt":13535,"description":13536,"extension":1101,"img":13294,"meta":13537,"navigation":1104,"path":13538,"seo":13539,"stem":13540,"tags":13541,"updatedAt":13535,"__hash__":13542},"articles\u002Farticles\u002Fgetting-started-angular-wvisual-studio-aspnet-core.md","Getting Started Angular w\u002FVisual Studio ASP.NET Core",{"type":10,"value":13283,"toc":13533},[13284,13287,13296,13299,13308,13311,13329,13332,13342,13345,13348,13357,13360,13366,13372,13382,13385,13395,13416,13426,13441,13454,13457,13477,13489,13499,13510,13520,13523],[16,13285,13286],{},"Starting a new project using the VS.NET 2017 latest release installed templates.",[16,13288,13289],{},[1139,13290,13292],{"href":13291,"target":1142},"\u002Farticles\u002Fimages\u002Fimage_636774731987290862.png",[156,13293],{"title":158,"style":10751,"border":8404,"alt":158,"src":13294,"width":8473,"height":13295},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731988097429.png",172,[16,13297,13298],{},"I end up with the following directory structure for hosting both my asp.net project and my angular client app.",[16,13300,13301],{},[1139,13302,13304],{"href":13303,"target":1142},"\u002Farticles\u002Fimages\u002Fimage_636774731988761038.png",[156,13305],{"title":158,"style":10751,"border":8404,"alt":158,"src":13306,"width":12375,"height":13307},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731989514209.png",341,[16,13309,13310],{},"The template is equivalent to creating an ASP.NET Core projects to act as an API backend, and an Angular CLI project to act as a UI. The template offers the convenience of hosting both project types in a single app project.",[16,13312,13313,13314,13316,13317,13320,13321,13323,13324,13328],{},"Consequently, the app project can be built and published as a single unit. The project template creates an ASP.NET Core app ",[19,13315,1889],{}," an Angular app. The ASP.NET Core app is intended to be used for data access, authorization, and other server-side concerns. The Angular app, residing in the ",[19,13318,13319],{},"ClientApp"," subdirectory, is intended to be used for all UI concerns.  The ",[19,13322,13319],{}," directory contains a standard Angular CLI app. See the official ",[1139,13325,13327],{"href":13326},"https:\u002F\u002Fgithub.com\u002Fangular\u002Fangular-cli\u002Fwiki","Angular documentation"," for more information.  Running ng commands – open command prompt, cd to the ClientApp directory.",[16,13330,13331],{},"If you have Angular CLI installed globally you can any of its commands i.e. ng lint, ng test etc. (if you do not have Angular CLI installed you can run via npm run ng (or npm run ng lint or npm run ng test). These npm commands reference the scripts setup in the package.json file",[16,13333,13334],{},[1139,13335,13337],{"href":13336},"\u002Farticles\u002Fimages\u002Fimage_636774731990182177.png",[156,13338],{"title":158,"style":10751,"border":8404,"alt":158,"src":13339,"width":13340,"height":13341},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731990903482.png",357,144,[16,13343,13344],{},"As we started this from an ASP.NET Core ‘Angular’ template – there is no need to run ng serve. Yes, read that again. The ASP.NET Core application has already been setup to serve both the c# ASP.NET Core parts as well as your client-side parts of the app.",[16,13346,13347],{},"How? Take a look at the Startup.cs file around app.UseSpa which starts both the Angular and ASP.NET sides of this application when you hit F5 (debug-run). The project is configured to start its own instance of the Angular CLI server in the background when the ASP.NET Core app starts in development mode. This makes it convenient as you don’t have to run a separate server manually (one for client app and one for the ASP.NET side)",[16,13349,13350],{},[1139,13351,13353],{"href":13352},"\u002Farticles\u002Fimages\u002Fimage_636774731991518749.png",[156,13354],{"title":158,"style":10751,"border":8404,"alt":158,"src":13355,"width":13356,"height":13167},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731992151351.png",361,[16,13358,13359],{},"The downside of letting VS.NET\u002FASP.NET Core run both sides, is that anytime c# is modified you will have to startup both the web and backend. This can be time consuming, as it does take some time to restart the web server. “The project is configured to start its own instance of the Angular CLI server in the background when the ASP.NET Core app starts in development mode”  To run Angular CLI server externally, independently of the ASP.NET Core process you can open a command prompt, navigate to the Clientapp directory and type npm start which as mentioned above can be found as a script within the package.json.\nRuns the following: “start” : “ng-serve --extract-css\"",[16,13361,13362,13363],{},"As a side note: ",[9125,13364,13365],{},"Installing the Angular CLI Globally",[16,13367,13368,13369,13371],{},"npm --g @angluar\u002Fcli",[1118,13370],{},"\nng --version",[16,13373,13374],{},[1139,13375,13377],{"href":13376},"\u002Farticles\u002Fimages\u002Fimage_636774731992924046.png",[156,13378],{"title":158,"style":10751,"border":8404,"alt":158,"src":13379,"width":13380,"height":13381},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731993996308.png",624,389,[16,13383,13384],{},"ng new –help",[16,13386,13387],{},[1139,13388,13390],{"href":13389},"\u002Farticles\u002Fimages\u002Fimage_636774731995308632.png",[156,13391],{"title":158,"style":13392,"border":8404,"alt":158,"src":13393,"width":2639,"height":13394},"border-image: none; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636774731996251347.png",461,[16,13396,13397,13398,11983,13401,13404,13405,13408,13409],{},"Now if you try to start the Angular CLI web server from the command prompt referencing the global CLI you will see typical error\u002Fwarning   C:\\Temp\\Angular\\Wildermuth\\ClientApp>",[19,13399,13400],{},"ng serve ",[1128,13402,13403],{}," Your global Angular CLI version (7.0.5) is greater than your local       version (1.7.0). The local Angular CLI version is used.","  Okay, so what is going on here. Yes my global version is 7.0.5 while my version in this solution can be found by looking at the package.json where you can see my local version within this project is \"@angular\u002Fcli\": \"~1.7.0\".\nBack to using ",[19,13406,13407],{},"npm start"," to launch the Angular CLI development server which will use the cli installed within the project i.e. version 1.7.0 (the configuration in package.json is respected)\n",[1139,13410,13412],{"href":13411},"\u002Farticles\u002Fimages\u002Fimage_636774731997045623.png",[156,13413],{"title":158,"style":10751,"border":8404,"alt":158,"src":13414,"width":8473,"height":13415},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731997855348.png",130,[16,13417,13418,13419,13422,13425],{},"Now I can open a browser and navigate to ",[1139,13420],{"title":13421,"href":13421},"http:\u002F\u002Flocalhost:4200\u002F",[1139,13423,13421],{"href":13421,"rel":13424},[3695]," and my Hello World application\u002Fpage if visible.",[16,13427,13428,13429,13433,13434,13437,13440],{},"Okay, one more option (these different approach are getting confusing). You can modify your ASP.NET Core app to use the external Angular CLI running instance instead of launching a new one on every F5 (debug-run). In your Startup.cs class, replace spa.UseAngularCliServer with the following: spa.UseProxyToSpaDevelopmentServer(“",[1139,13430,13432],{"rel":13431},[3695],"https:\u002F\u002Flocalhost:4200”","); After making this change, and pressing F5 it opens a browser to this address ",[1139,13435],{"title":13436,"href":13436},"https:\u002F\u002Flocalhost:44399\u002F",[1139,13438,13436],{"href":13436,"rel":13439},[3695]," (I thought it would have been localhost:4200). Don’t fret, it is using the externally started server.",[16,13442,13443,13444,13447,13450,13451],{},"You can validate this by closing the previously opened command prompt (that was started from npm start), then refresh the ",[1139,13445],{"href":13446},"https:\u002F\u002Flocahost:44399",[1139,13448,13446],{"href":13446,"rel":13449},[3695]," and you will see exceptions like …",[1128,13452,13453],{},"SocketException: No connection could be made because the target machine actively refused it…",[16,13455,13456],{},"So, the pattern at this moment is   1. Modify Startup.cs (comment out the\nUseAngluarCliServer and add the UseProxyToSpaDevelopmentServer methods below)   \u002F\u002Fspa.UseAngularCliServer(npmScript: \"start\");",[16,13458,13459,13460,13463,13466,13467,13470,13471,13473,13476],{},"spa.UseProxyToSpaDevelopmentServer(",[1139,13461],{"href":13462},"http:\u002F\u002Flocalhost:4200",[1139,13464,13462],{"href":13462,"rel":13465},[3695],");      2. Open command prompt, cd to ClientApp and type ",[19,13468,13469],{},"npm start ","(starts the web server, which will remain open while I code in VS.NET and pressing F5 will compile my c# and server it up in the existing web server created from npm start  Interestingly, you do not have to hit F5 all the time. So in this case, you started the Angular server with npm start, you did not start debugging with F5 however you can just open a browser and use the ",[1139,13472],{"title":13436,"href":13436},[1139,13474,13436],{"href":13436,"rel":13475},[3695]," address to view your page.",[16,13478,13479,13480,13482],{},"At this moment my code is not in debug mode. How can I attach a debugger, so I can once again step into the code (without hitting F5)? Yes you can. Open Debug – Attach To Process (and select dotnet.exe)  Refresh your page and now any breakpoints will be hit allowing you to step through your code.",[1118,13481],{},[1139,13483,13485],{"href":13484},"\u002Farticles\u002Fimages\u002Fimage_636774724358746757.png",[156,13486],{"title":158,"style":12186,"border":8404,"alt":158,"src":13487,"width":13488,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724359686912.png",229,[16,13490,13491,13492],{},"With this template, navigation\u002Fpages are not served through MVC (controllers), your ASP.NET Core solution is really setup to server data through AJAX or Rest End Points only. This is a big change from ASP.NET Web Projects where navigating to a page would open a controller which would return a View (cshtml). This is a big change! This approach is very much inline with a true SPA (where one page is loaded and navigation between pages is performed locally within the html\u002Fjs via client-side routing)  One more thing for this post. With your browser open to the home of the application, open ClientApp\u002Fsrc\u002Fhome\u002Fhome.component.html in VS.NET. With both the browser and VS.NET visible modify Welcome to Welcome! and save the file. Notice that the browser was aware of the html\u002Fjs modification automatically, and refreshed the page. Now Welcome shows Welcome! all automatically.\n",[1139,13493,13495],{"href":13494},"\u002Farticles\u002Fimages\u002Fimage_636774724360363421.png",[156,13496],{"title":158,"style":12396,"border":8404,"alt":158,"src":13497,"width":8473,"height":13498},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724361024657.png",78,[16,13500,13501,13502,13505,13506,13509],{},"In ",[19,13503,13504],{},"development",", the app runs in a mode optimized for developer convenience. For example, JavaScript bundles include source maps (so that when debugging, you can see your original TypeScript code). The app watches for TypeScript, HTML, and CSS file changes on disk and automatically recompiles and reloads when it sees those files change.  This does not occur with a deployed web application in production. In production, the apps files are optimized for performance. When you publish the build configuration emits a minified, ahead-of-time (AOT) compiled build of your client side code.  ",[19,13507,13508],{},"Deployment","  As a test I published my project to a local folder. Watching the Output window, I can see it creates a directory within my project …\\obj\\Release\\netcoreapp2.1\\PubTmp\\Out then runs the following:   npm install    npm run build --prod    ng build --extract-css “—prod”    Creating directory Publish\\ClientApp\\dist, copies file and finished.",[16,13511,13512],{},[1139,13513,13515],{"href":13514},"\u002Farticles\u002Fimages\u002Fimage_636774724361830597.png",[156,13516],{"title":158,"style":12186,"border":8404,"alt":158,"src":13517,"width":13518,"height":13519},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724362731671.png",355,165,[16,13521,13522],{},"How did it know to do all those commands? Open the .csproj, there you will find build steps integrated. This is beyond the scope of this post, however reading up on MSBuild documents may help. I do feel there is a lot to learn here however.",[16,13524,13525],{},[1139,13526,13528],{"href":13527},"\u002Farticles\u002Fimages\u002Fimage_636774724364079668.png",[156,13529],{"title":158,"style":12186,"border":8404,"alt":158,"src":13530,"width":13531,"height":13532},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724364950086.png",485,154,{"title":1080,"searchDepth":1081,"depth":1081,"links":13534},[],"2018-11-10T18:47:16.586Z","A tutorial on starting out with the Angular template within Visual Studio 2017.  Modern web development is new and different.  I liken it to when developers made the jump from classic asp to asp.net.  There is a learning curve!  Start small, challenge yourself to learn small tasks and over time a familiarity will give you more comfort.  Read more.",{},"\u002Farticles\u002Fgetting-started-angular-wvisual-studio-aspnet-core",{"title":13281,"description":13536},"articles\u002Fgetting-started-angular-wvisual-studio-aspnet-core",[10685],"EcxN8ODWjniqrt9rSc5VIej063ti2FC7LJ0qiePYUsU",{"id":13544,"title":13545,"author":1915,"body":13546,"createdAt":13605,"description":13606,"extension":1101,"img":13558,"meta":13607,"navigation":1104,"path":13608,"seo":13609,"stem":13610,"tags":13611,"updatedAt":13605,"__hash__":13612},"articles\u002Farticles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip.md","Visual Studio I need a Command Prompt Quick Tip",{"type":10,"value":13547,"toc":13603},[13548,13551,13560,13572,13581,13584,13595],[16,13549,13550],{},"Ok, with today's’ development efforts I am in need of a quick way to open a command prompt to the location of the solution. Here is a quick tip on how to enable a keystroke to immediately open one for you (while working within vs.net).  Tools > External Tools “Add”",[16,13552,13553],{},[1139,13554,13556],{"href":13555},"\u002Farticles\u002Fimages\u002Fimage_636774678565575322.png",[156,13557],{"title":158,"style":12186,"border":8404,"alt":158,"src":13558,"width":8473,"height":13559},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774678566514389.png",242,[16,13561,13562,13563,13565,13566,13568,13569,13571],{},"Use the following values  Title: VS Command Prompt",[1118,13564],{},"\nCommand: C:\\Windows\\System32\\cmd.exe",[1118,13567],{},"\nArguments: \u002Fk “C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools\\VsDevCmd.bat”",[1118,13570],{},"\nInitial Directory: $(SolutionDir) (You can also use $(ProjectDir) to open command prompt in the location of the current project … i like this better)  After you hit OK VS Command Prompt command is available under Tools",[16,13573,13574],{},[1139,13575,13577],{"href":13576},"\u002Farticles\u002Fimages\u002Fimage_636774678569077476.png",[156,13578],{"title":158,"style":12186,"border":8404,"alt":158,"src":13579,"width":13580,"height":8473},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774678569735435.png",140,[16,13582,13583],{},"Now you can add a Key Stroke command for this…  Tools > Options > Keyboard (here i have added Alt-C). Shown below the only thing to remember is this was my 2nd external tool so I had to look for Tools.ExternalCommand2 to attach my keystroke command.",[16,13585,13586],{},[1139,13587,13589],{"href":13588},"\u002Farticles\u002Fimages\u002FSNAGHTML58a67cb2_636774678570976068.png",[156,13590],{"title":13591,"style":12186,"border":8404,"alt":13591,"src":13592,"width":13593,"height":13594},"SNAGHTML58a67cb2","\u002Farticles\u002Fimages\u002FSNAGHTML58a67cb2_thumb_636774678571975067.png",400,210,[16,13596,13597,13598,13602],{},"Now ",[156,13599],{"className":13600,"alt":12432,"src":13601},[12429,12430],"\u002Farticles\u002Fimages\u002FwlEmoticon-smile_636774678572557490.png"," I can click Alt-C and immediately a command prompt window opens to the my solution directory.",{"title":1080,"searchDepth":1081,"depth":1081,"links":13604},[],"2018-11-10T17:30:57.333Z","Need a command prompt fast while working in Visual Studio? Yes is the answer, especially with modern web development efforts.  Often this is to start a command line interface tool, install an npm package, start a web server etc.  This is an old tip but is more relevant today than ever.  Alt-C is the answer...read how.",{},"\u002Farticles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip",{"title":13545,"description":13606},"articles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip",[8526],"ghOLgPX7maoaDNaCXGN9EJJOfhVA9pCxBkqaMJ6_RJA",{"id":13614,"title":13615,"author":1915,"body":13616,"createdAt":13805,"description":13806,"extension":1101,"img":13691,"meta":13807,"navigation":1104,"path":13808,"seo":13809,"stem":13810,"tags":13811,"updatedAt":13805,"__hash__":13813},"articles\u002Farticles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework.md","xUnit–what is it and why another unit testing framework",{"type":10,"value":13617,"toc":13803},[13618,13624,13654,13657,13660,13769,13772,13786,13788],[16,13619,13620,13621,13623],{},"Special thank you for Channel 9 and @skimedic for sharing his unit testing knowledge.",[1118,13622],{},"\nXUnit leverage some of the new features to help developers write cleaner test, as tests should be kept clean and treated as first-class citizens.",[48,13625,13626,13629,13632,13642,13645],{},[51,13627,13628],{},"NUnit was not fully compatible with .NET Core 2 at the time",[51,13630,13631],{},"xUnit is aimed at improving test isolation and trying to codify a set of rules to establish a testing standard.",[51,13633,13634,13635,1158,13638,13641],{},"xUnit ",[4215,13636,13637],{},"Fact",[4215,13639,13640],{},"Theory"," attributes are extensible, so you can implement your own testing functionality.xUnit doesn’t use Test Lists and .vsmdi files to keep track of your tests.",[51,13643,13644],{},"Microsoft is using xUnit internally, one of its creators is from Microsoft. xUnit was also created by one of the original authors of NUnit.",[51,13646,13647,13648,13651],{},"Side-by-side Performance Comparison of testing frameworks can be found here ",[1139,13649],{"title":13650,"href":13650},"https:\u002F\u002Fblogs.msdn.microsoft.com\u002Fvisualstudio\u002F2017\u002F11\u002F16\u002Ftest-experience-improvements\u002F",[1139,13652,13650],{"href":13650,"rel":13653},[3695],[16,13655,13656],{},"Where to get it and how to add it to your projects (2 ways)",[2652,13658,13659],{},"  \n* Use Nuget to add xunit as well as the runner  \n* Add New Project – .NET Core xUnit Test Project  \n",[48,13661,13662,13665,13671,13674,13679,13682,13694,13697,13700,13710,13713,13716,13719,13726,13729,13740,13743,13753,13756,13759],{},[51,13663,13664],{},"It does work with live unit testing",[51,13666,13667,13668,13670],{},"Add ",[4215,13669,13637],{}," attribute on a method to mark it as a test",[51,13672,13673],{},"Use Theory and InlineData as mechanism to pass data into the test",[51,13675,13676,13678],{},[4215,13677,13640],{}," attribute to mark a method as a test and setup incoming parameters (2 approaches InlineData and MemberData)",[51,13680,13681],{},"[InlineData(1,2,3)",[51,13683,13684,13685],{},"approach to pass data into the test method (add additional InlineData attributes for multiple runs of same test)\n",[1139,13686,13688],{"href":13687},"\u002Farticles\u002Fimages\u002FSNAGHTML2e5cfd1e_636767597902517481.png",[156,13689],{"style":10380,"title":13690,"src":13691,"alt":13690,"width":13692,"height":13693,"border":8404},"SNAGHTML2e5cfd1e","\u002Farticles\u002Fimages\u002FSNAGHTML2e5cfd1e_thumb_636767597903473559.png",487,209,[51,13695,13696],{},"MemberData(nameof(IEnumerable\u003Cobject>",[51,13698,13699],{},"In the example below we are using a method to return data to be used (however this method could also read data from other files such as text or excel to be returned)",[51,13701,13702,13703],{},"approach to pass data into the test method\n",[1139,13704,13706],{"href":13705},"\u002Farticles\u002Fimages\u002FSNAGHTML2e5bc0f5_636767597904435811.png",[156,13707],{"style":10380,"title":13708,"src":13709,"alt":13708,"width":9251,"height":8465,"border":8404},"SNAGHTML2e5bc0f5","\u002Farticles\u002Fimages\u002FSNAGHTML2e5bc0f5_thumb_636767597905425086.png",[51,13711,13712],{},"xUnit runs it’s tests in parallel to take advantage of today’s processors",[51,13714,13715],{},"tests within one class are run serial",[51,13717,13718],{},"tests in multiple classes are run parallel",[51,13720,13721,13722,13725],{},"can be disabled by creating a test collection (add attribute ",[4215,13723,13724],{},"Collection({name})",", and all within the same collection will be run serial",[51,13727,13728],{},"in order to test that an exception is thrown",[51,13730,13731,13732],{},"Assert.Throws\u003CInvalidOperationException>(() => ThrowAnError());\n",[1139,13733,13735],{"href":13734},"\u002Farticles\u002Fimages\u002Fimage_636767597907208471.png",[156,13736],{"style":10380,"title":158,"src":13737,"alt":158,"width":13738,"height":13739,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636767597908147368.png",452,301,[51,13741,13742],{},"Setup\u002FTeardown",[51,13744,13745,13746,1158,13749,13752],{},"There are no ",[4215,13747,13748],{},"Setup",[4215,13750,13751],{},"Teardown"," attributes, this is done using the test class’ constructor and an IDisposable. This encourages developers to write cleaner tests.",[51,13754,13755],{},"use constructor in place of Setup attributes to prepare tests",[51,13757,13758],{},"now use IDisposable to replace teardown i.e. public class ATestClass : IDisposable\npublic void Dispose() {\n   \u002F\u002Fsomething here to clean up\n}",[51,13760,13761,13762],{},"for input\u002Foutput there exists ITestOutputHelper as shown below to output log\n",[1139,13763,13765],{"href":13764},"\u002Farticles\u002Fimages\u002Fimage_636767597909423747.png",[156,13766],{"style":10380,"title":158,"src":13767,"alt":158,"width":13768,"height":8450,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636767597910292790.png",447,[16,13770,13771],{},"Notes",[48,13773,13774,13777],{},[51,13775,13776],{},"Works in .net core and .net framework",[51,13778,13779,13780,13783],{},"TODO: Read up on Live Unit Testing ",[1139,13781],{"title":13782,"href":13782},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fvisualstudio\u002Ftest\u002Flive-unit-testing?view=vs-2017",[1139,13784,13782],{"href":13782,"rel":13785},[3695],[16,13787,11769],{},[13,13789,10274,13790,8216,13793,13796,13797,8216,13800],{},[1139,13791,13792],{"title":13792,"href":13792},"https:\u002F\u002Fxunit.github.io\u002Fdocs\u002Fwhy-did-we-build-xunit-1.0.html",[1139,13794,13795],{"title":13795,"href":13795},"https:\u002F\u002Fdev.to\u002Fhatsrumandcode\u002Fnet-core-2-why-xunit-and-not-nunit-or-mstest--aei","   \n",[1139,13798,13799],{"title":13799,"href":13799},"https:\u002F\u002Fchannel9.msdn.com\u002FShows\u002FVisual-Studio-Toolbox\u002FUnit-Testing-xUnit",[1139,13801,13802],{"title":13802,"href":13802},"https:\u002F\u002Fxunit.github.io\u002F",{"title":1080,"searchDepth":1081,"depth":1081,"links":13804},[],"2018-11-02T12:49:51.111Z","Primarily XUnit leverages some new features to help developers write cleaner test, as tests should be kept clean and treated as first-class citizens.",{},"\u002Farticles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework",{"title":13615,"description":13806},"articles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework",[10632,13812],"testing","Xa57WSBlnynbn4MUPddzdtkn0rAmRbojbJ2tqgZD33w",{"id":13815,"title":13816,"author":1915,"body":13817,"createdAt":13979,"description":13980,"extension":1101,"img":13981,"meta":13982,"navigation":1104,"path":13983,"seo":13984,"stem":13985,"tags":13986,"updatedAt":13979,"__hash__":13987},"articles\u002Farticles\u002Fnet-standard-vs-net-core.md",".NET Standard vs. .NET Core",{"type":10,"value":13818,"toc":13977},[13819,13822,13825,13828,13831,13850,13909,13960],[16,13820,13821],{},"In Visual Studio, there are at least 3 different types of class library you can create:",[16,13823,13824],{},"*Class Library (.NET Framework)\n*Class Library (.NET Standard)\n*Class Library (.NET Core)",[16,13826,13827],{},"Use a .NET Standard library when you want to increase the number of apps that will be compatible with your library, and you are okay with\na decrease in the .NET API surface area your library can access.",[16,13829,13830],{},"Use a .NET Core library when you want to increase the .NET API surface area your library can access, and you are okay with allowing only\n.NET Core apps to be compatible with your library.",[16,13832,13833,13834,13837,13838,13841,13842,13845,13846,13849],{},"Difference:\nCompatibility: Libraries that target .NET Standard will run on any .NET Standard compliant runtime, such as .NET Core, .NET Framework, Mono\u002FXamarin. On the other hand, libraries that target .NET Core can only run on the .NET Core runtime.\nAPI Surface Area: .NET Standard libraries come with everything in ",[2239,13835,13836],{},"NETStandard.Library"," whereas .NET Core libraries come with everything in ",[2239,13839,13840],{},"Microsoft.NETCore.App",". The latter includes approximately 20 additional libraries, some of which we can add manually to our .NET Standard library (such as ",[2239,13843,13844],{},"System.Threading.Thread",") and some of which are not compatible with the .NET Standard (such as ",[2239,13847,13848],{},"Microsoft.NETCore.CoreCLR",").\nAlso, .NET Core libraries specify a runtime and come with an application model. That's important, for instance, to make unit test class libraries runnable.\nIgnoring libraries for a moment, the reason that .NET Standard exists is for portability; it defines a set of APIs that .NET platforms agree to implement. Any platform that implements a .NET Standard is compatible with libraries that target that .NET Standard. One of those compatible platforms is .NET Core.\nComing back to libraries, the .NET Standard library templates exist to run on multiple runtimes (at the expense of API surface area). Obversely, the .NET Core library templates exist to access more API surface area (at the expense of compatibility) and to specify a platform against which to build an executable.\nSaid another way…",[16,13851,1977,13852,13855,13856,13859,13860,13863,13864,1158,13867,13870,13871,13874,13877,13878,1158,13880,7500,13882,3091,13884,1158,13886,13888,13889,13892,13893,13895,13896,13898,13899,13902,13903,13905,13906,1200],{},[19,13853,13854],{},".Net Core Class Library"," is built upon the ",[19,13857,13858],{},".Net Standard",". If you want to implement a library that is portable to the ",[19,13861,13862],{},".Net Framework",", .",[19,13865,13866],{},"Net Core",[19,13868,13869],{},"Xamarin",", choose a ",[19,13872,13873],{},".Net Standard Library",[19,13875,13876],{},".Net Core will ultimately implement .Net Standard 2"," (as will ",[19,13879,13869],{},[19,13881,13862],{},[19,13883,11755],{},[19,13885,13869],{},[19,13887,13862],{}," can, therefore, be identified as ",[19,13890,13891],{},"flavours"," of ",[19,13894,13858],{},"\nTo future-proof your applications for code sharing and reuse , you would rather implement .Net Standard libraries.\nMicrosoft also recommends that you use ",[19,13897,11925],{}," instead of ",[19,13900,13901],{},"Portable Class Libraries",".\nTo quote MSDN as an authoritative source, ",[19,13904,13858],{}," is intended to be ",[19,13907,13908],{},"One Library to Rule Them All",[16,13910,13911,13913,13914,1196,13916,13919,13920,13922,13923,13926,13927,1158,13930,3697,13933,13936,13937,13863,13939,3145,13942,13944,13945,13947,13948,13950,13951,13953,13954,11776,13956,13959],{},[19,13912,11925],{}," solves the code sharing problem for .NET developers across all platforms by bringing all the APIs that you expect and love across the environments that you need: desktop applications, mobile apps & games, and cloud services:\n",[19,13915,11925],{},[19,13917,13918],{},"set of APIs"," that ",[19,13921,11956],{}," .NET platforms ",[19,13924,13925],{},"have to implement",". This ",[19,13928,13929],{},"unifies the .NET platforms",[19,13931,13932],{},"prevents future fragmentation",[19,13934,13935],{},".NET Standard 2.0"," will be implemented by ",[19,13938,11953],{},[19,13940,13941],{},"NET Core",[19,13943,13869],{},". For ",[19,13946,11904],{},", this will add many of the existing APIs that have been requested.\n",[19,13949,13935],{}," includes a compatibility shim for ",[19,13952,11953],{}," binaries, significantly increasing the set of libraries that you can reference from your .NET Standard libraries.\n",[19,13955,11925],{},[19,13957,13958],{},"will replace Portable Class Libraries (PCLs)"," as the tooling story for building multi-platform .NET libraries.",[16,13961,13962,13963,13966,11776,13969,13971,13974],{},"References: ",[1139,13964],{"title":13965,"href":13965},"https:\u002F\u002Fblogs.msdn.microsoft.com\u002Fdotnet\u002F2016\u002F09\u002F26\u002Fintroducing-net-standard\u002F",[1139,13967,13965],{"href":13965,"rel":13968},[3695],[1118,13970],{},[1139,13972],{"title":13973,"href":13973},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F42939454\u002Fwhat-is-the-difference-between-net-core-and-net-standard-class-library-project",[1139,13975,13973],{"href":13973,"rel":13976},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":13978},[],"2018-10-30T16:21:49.892Z","Core vs. Standard has come up a lot recently.  I wanted to re-emphasize the differences here for my own purposes using references mentioned below.  Really important to know and understand.","\u002Farticles\u002Fimages\u002Fopen-live-writer-keep-nuget-packages-out-of-tfs-source-co_8714-tfs3_thumb.png",{},"\u002Farticles\u002Fnet-standard-vs-net-core",{"title":13816,"description":13980},"articles\u002Fnet-standard-vs-net-core",[10632],"kx8ta9AYIZhNb3zhlW22x73UcUBy7FRGgPUlFaQWAC0",{"id":13989,"title":13990,"author":1915,"body":13991,"createdAt":14038,"description":14039,"extension":1101,"img":14020,"meta":14040,"navigation":1104,"path":14041,"seo":14042,"stem":14043,"tags":14044,"updatedAt":14038,"__hash__":14045},"articles\u002Farticles\u002Fteam-foundation-2018-tfs-net-core-command.md","Team Foundation 2018 TFS .NET Core Command",{"type":10,"value":13992,"toc":14036},[13993,13996,13999,14002,14013,14022],[16,13994,13995],{},"Using command dotnet push I was wanting to only publish nuget packages that included *.nupkg but also exclude *.symbols.nupkg pattern.",[16,13997,13998],{},"I figured okay, I would use option to negate a particular path. Using the help guidance",[16,14000,14001],{},"The pattern to match or path to nupkg files to be uploaded. Multiple patterns can be separated by a semicolon, and you can make a pattern negative by prefixing it with '-:'.",[16,14003,14004,14005,14010,14012],{},"Example: ",[19,14006,10888,14007],{},[1128,14008,14009],{},".nupkg;-:",[1128,14011,10888],{},".Tests.nupkg",[16,14014,14015],{},[1139,14016,14018],{"href":14017},"\u002Farticles\u002Fimages\u002Fimage_636764987271419965.png",[156,14019],{"style":10380,"title":158,"src":14020,"alt":158,"width":8450,"height":14021,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636764987272194490.png",118,[16,14023,14024,14025,14027,14028,14035],{},"The issue is that this is incorrect.  If you wish to pattern negative prefix with ! (with semi-colon for make delimited) such as",[1118,14026],{},"\n$(Build.ArtifactStagingDirectory)\u002F",[1128,14029,14030,14031,14034],{},".nupkg",[19,14032,14033],{},";!","$(Build.ArtifactStagingDirectory)\u002F",".symbols.nupkg",{"title":1080,"searchDepth":1081,"depth":1081,"links":14037},[],"2018-10-30T12:18:47.314Z","The dotnet pack command builds the project and creates NuGet packages. Careful with configuration and specifically negative file pattern matching documentation(incorrect).",{},"\u002Farticles\u002Fteam-foundation-2018-tfs-net-core-command",{"title":13990,"description":14039},"articles\u002Fteam-foundation-2018-tfs-net-core-command",[10945],"_MZCZimFHc2iJo_tCF1mvmKFsazly7CiZo31fvpUqzE",{"id":14047,"title":14048,"author":8,"body":14049,"createdAt":14114,"description":14115,"extension":1101,"img":8103,"meta":14116,"navigation":1104,"path":14117,"seo":14118,"stem":14119,"tags":14120,"updatedAt":14114,"__hash__":14121},"articles\u002Farticles\u002Fupdate-npm-on-windows–current-best-approach.md","Update npm on Windows–Current Best Approach",{"type":10,"value":14050,"toc":14112},[14051,14057,14060,14065,14076],[16,14052,14053,14054,14056],{},"This is the new best way to upgrade ",[19,14055,6990],{}," on Windows.",[16,14058,14059],{},"Run PowerShell as Administrator",[2232,14061,14062],{},[2239,14063,14064],{},"Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force\nnpm install -g npm-windows-upgrade\nnpm-windows-upgrade",[16,14066,14067,14068,14071,14072,14075],{},"Note: Do not run ",[2239,14069,14070],{},"npm i -g npm",". Instead use ",[2239,14073,14074],{},"npm-windows-upgrade"," to update npm going forward. Also if you run the NodeJS installer, it will replace the node version.",[48,14077,14078,14081,14087,14090,14093,14096,14102],{},[51,14079,14080],{},"Upgrades npm in-place, where node installed it.",[51,14082,14083,14084,1200],{},"Easy updating, update to the latest by running ",[2239,14085,14086],{},"npm-windows-upgrade -p -v latest",[51,14088,14089],{},"Does not modify the default path.",[51,14091,14092],{},"Does not change the default global package location.",[51,14094,14095],{},"Allows easy upgrades and downgrades.",[51,14097,14098,1200],{},[1139,14099,14101],{"href":14100},"https:\u002F\u002Fgithub.com\u002Fnpm\u002Fnpm\u002Fwiki\u002FTroubleshooting#upgrading-on-windows","Officially recommended by the NPM team",[51,14103,14104,14105,14108,14109,7815],{},"A list of versions matched between NPM and NODE (",[1139,14106,14107],{"href":14107},"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002Freleases\u002F",") - but you will need to download NODE INSTALLER and run that to update node (",[1139,14110,14111],{"href":14111},"https:\u002F\u002Fnodejs.org\u002Fen\u002F",{"title":1080,"searchDepth":1081,"depth":1081,"links":14113},[],"2018-10-23T18:23:21.082Z","This is the new best way to upgrade npm on Windows",{},"\u002Farticles\u002Fupdate-npm-on-windows-current-best-approach",{"title":14048,"description":14115},"articles\u002Fupdate-npm-on-windows–current-best-approach",[6990],"o4jaqV350CYl-Sj4Y9dUejcdC7WPqrJ9gzKLdNfnykg",{"id":14123,"title":14124,"author":8,"body":14125,"createdAt":14149,"description":14150,"extension":1101,"img":14151,"meta":14152,"navigation":1104,"path":14153,"seo":14154,"stem":14155,"tags":14156,"updatedAt":14149,"__hash__":14157},"articles\u002Farticles\u002Funable-to-save-database-diagrams.md","Unable to save database diagrams",{"type":10,"value":14126,"toc":14147},[14127,14130,14140],[16,14128,14129],{},"It sounds like your sysdiagrams table somehow lost the IDENTITY property on the diagram_id column.  Using the following SQL I was able to drop the sysdiagrams table and rebuild.  Note you will lose any existing diagrams (if you had any during this process)",[2232,14131,14132,14135],{},[2239,14133,14134],{},"DROP TABLE dbo.sysdiagrams;\nGO\nCREATE TABLE [dbo].[sysdiagrams]\n(\n    [name] [sysname] NOT NULL,\n    [principal_id] [int] NOT NULL,\n    [diagram_id] [int] IDENTITY(1,1) PRIMARY KEY,\n    [version] [int] NULL,\n    [definition] [varbinary](max) NULL,\n    CONSTRAINT [UK_principal_name] UNIQUE ([principal_id],[name])\n);\n",[16,14136,14137],{},[2239,14138,14139],{},"GO\nEXEC sys.sp_addextendedproperty\n@name=N'microsoft_database_tools_support',\n@value=1 ,\n@level0type=N'SCHEMA',\n@level0name=N'dbo',\n@level1type=N'TABLE',\n@level1name=N'sysdiagrams';\nGO",[16,14141,14142,14143],{},"Note: ",[1139,14144,14146],{"href":14145},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fsql\u002Fssms\u002Fsql-server-management-studio-changelog-ssms?view=sql-server-2017","SSMS v18 release notes",{"title":1080,"searchDepth":1081,"depth":1081,"links":14148},[],"2018-10-03 13:11:00","Once you resolve the ability to save database diagrams, please note that in the next release of SSMS v18 Microsoft is deprecating database diagram feature.  I don't quite understand this thinking however you can find more information in the release notes.","\u002Farticles\u002Fimages\u002FrGWupsowyf.png",{},"\u002Farticles\u002Funable-to-save-database-diagrams",{"title":14124,"description":14150},"articles\u002Funable-to-save-database-diagrams",[7873],"Maa_m8xqrM2uhGGESY8pwhI8NqvDOGnAZPMbdyjrRtY",{"id":14159,"title":14160,"author":1915,"body":14161,"createdAt":14187,"description":14188,"extension":1101,"img":1915,"meta":14189,"navigation":1104,"path":14190,"seo":14191,"stem":14192,"tags":14193,"updatedAt":14187,"__hash__":14194},"articles\u002Farticles\u002Fdotnet-new-install-error.md","dotnet new–install Error",{"type":10,"value":14162,"toc":14185},[14163],[16,14164,14165,14166,14169,14170,14172,14173,14175,14176,14178,14179,14182],{},"Error: Could not install …\nError: Value cannot be null.\nParameter name: key\nUsage: new ",[4215,14167,14168],{},"options","\n…",[1118,14171],{},"\nWhen building a new solution template for ASP.NET Core solution, I received the above error.  I had not seen this with prior template build efforts.  This was new with .NET Core.",[1118,14174],{},"\nThe error occurs when one of the node_modules folders contain a template.json file.  The solution for me, was to entirely remove the node_modules directory before attempting to build the template.",[1118,14177],{},"\nReference: ",[1139,14180],{"title":14181,"href":14181},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fcli\u002Fissues\u002F8989",[1139,14183,14181],{"href":14181,"rel":14184},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":14186},[],"2018-10-01T17:34:36.000Z","When building a new solution template for ASP.NET Core solution, I received the above error.  I had not seen this with prior template build efforts.  This was new with .NET Core.",{},"\u002Farticles\u002Fdotnet-new-install-error",{"title":14160,"description":14188},"articles\u002Fdotnet-new-install-error",[8994,8526],"XRM2kTE2W4vJBJM2Tq54l8-3P9fLs6wmg5o6w7hhzcA",{"id":14196,"title":14197,"author":1915,"body":14198,"createdAt":14219,"description":14220,"extension":1101,"img":14215,"meta":14221,"navigation":1104,"path":14222,"seo":14223,"stem":14224,"tags":14225,"updatedAt":14219,"__hash__":14226},"articles\u002Farticles\u002Fcannot-execute-as-the-database-principle.md","Cannot execute as the database principle",{"type":10,"value":14199,"toc":14217},[14200,14203,14208],[16,14201,14202],{},"I resolved this issue by setting database owner. My database did not have had any owner before this issue. Execute this command in your database to set owner to sysadmin account",[2232,14204,14205],{},[2239,14206,14207],{},"use [YourDatabaseName] EXEC sp_changedbowner 'sa'\n",[16,14209,14210],{},[1139,14211,14213],{"href":14212},"\u002Farticles\u002Fimages\u002Fimage_636694161252157189.png",[156,14214],{"style":10380,"title":158,"src":14215,"alt":158,"width":14216,"height":13167,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636694161255987537.png",416,{"title":1080,"searchDepth":1081,"depth":1081,"links":14218},[],"2018-08-09T16:55:25.000Z","My database did not have had any owner before this issue. Execute this command in your database to set owner to sysadmin account",{},"\u002Farticles\u002Fcannot-execute-as-the-database-principle",{"title":14197,"description":14220},"articles\u002Fcannot-execute-as-the-database-principle",[8743],"PbylAI9ZBnAUp_zBnJXlFXGO3ZSZlRYI-Inwu0l9OrU",{"id":14228,"title":14229,"author":1915,"body":14230,"createdAt":14285,"description":14286,"extension":1101,"img":14287,"meta":14288,"navigation":1104,"path":14289,"seo":14290,"stem":14291,"tags":14292,"updatedAt":14285,"__hash__":14293},"articles\u002Farticles\u002Fexecution-failed-for-task-appflutterbuilddebug.md","Execution failed for task ‘:app:flutterBuildDebug’",{"type":10,"value":14231,"toc":14283},[14232,14235,14238,14241,14254,14260,14266,14275],[16,14233,14234],{},"Suddenly I have this error. I thought it was something I had inadvertently injected into my code. Solution below…",[16,14236,14237],{},"Error reading dependency file C:{path to project}\\build\\app\\intermediates\\flutter\\debug\\snapshot_blob.bin.d: java.lang.ArrayIndexOutOfBoundsException: 1",[16,14239,14240],{},"Oops; flutter has exited unexpectedly.",[16,14242,14243,14244,14246,14247,1200,14251,14253],{},"Crash report written to C:{path to project}\\flutter_11.log;",[1118,14245],{},"\nplease let us know at ",[1139,14248,14249],{"href":14249,"rel":14250},"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fissues",[3695],[1118,14252],{},"\nFAILURE: Build failed with an exception.",[16,14255,14256,14257,14259],{},"Where:",[1118,14258],{},"\nScript 'C:\\flutter\\packages\\flutter_tools\\gradle\\flutter.gradle' line: 435",[16,14261,14262,14263,14265],{},"What went wrong:",[1118,14264],{},"\nExecution failed for task ':app:flutterBuildDebug'.",[13,14267,14268],{},[16,14269,14270,14271,14273,8874],{},"Process 'command 'C:\\flutter\\bin\\flutter.bat'' finished with non-zero exit value 1",[1118,14272],{},[19,14274,10585],{},[48,14276,14277,14280],{},[51,14278,14279],{},"Open solution folder, remove the build folder",[51,14281,14282],{},"Rerun F5 application",{"title":1080,"searchDepth":1081,"depth":1081,"links":14284},[],"2018-06-03T19:46:02.000Z","Errors occur. This one was perplexing but was quickly resolved.  Using Flutter and getting 'dependency file' error.  Check it out.","\u002Farticles\u002Fimages\u002FuO8VUVifgS.png",{},"\u002Farticles\u002Fexecution-failed-for-task-appflutterbuilddebug",{"title":14229,"description":14286},"articles\u002Fexecution-failed-for-task-appflutterbuilddebug",[6907],"Z12hhh5QoJueG5H5FTzIPniuxsdYh8FrpbtVEnzsdTs",{"id":14295,"title":14296,"author":1915,"body":14297,"createdAt":14363,"description":14364,"extension":1101,"img":14315,"meta":14365,"navigation":1104,"path":14366,"seo":14367,"stem":14368,"tags":14369,"updatedAt":14363,"__hash__":14370},"articles\u002Farticles\u002Fxamarin-android-device-manager-diskdatapartitionsize.md","Xamarin Android Device Manager, disk.dataPartition.size",{"type":10,"value":14298,"toc":14361},[14299,14302,14308,14317,14337,14340,14348,14351],[16,14300,14301],{},"Changing the size of emulator memory as a result of INSTALL_FAILED_INSUFFICIENT_STORAGE error message.",[16,14303,14304,14305,14307],{},"Step 1 Edit Configuration files",[1118,14306],{},"\nLocate the configuration files by opening the directory for the particular emulator.  Ensure that the emulator is stopped before proceeding.",[16,14309,14310],{},[1139,14311,14313],{"href":14312},"\u002Farticles\u002Fimages\u002Fimage_636635510284638219.png",[156,14314],{"style":12396,"title":158,"src":14315,"alt":158,"width":14316,"height":12337,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636635510288324866.png",321,[48,14318,14319,14325,14328,14331],{},[51,14320,14321,14322,7391],{},"Edit ",[19,14323,14324],{},"hardware-qemu.ini",[51,14326,14327],{},"Before disk.dataPartition.size = 550m",[51,14329,14330],{},"After disk.dataPartition.size = 8192m",[51,14332,14321,14333,14336],{},[19,14334,14335],{},"config.ini"," (change to the following) disk.dataPartition.size=8192M",[16,14338,14339],{},"Step 2 Factory Reset the emulator before booting the emulator, start up.",[16,14341,14342],{},[1139,14343,14345],{"href":14344},"\u002Farticles\u002Fimages\u002Fimage_636635510293311055.png",[156,14346],{"style":12186,"title":158,"src":14347,"alt":158,"width":11296,"height":9286,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636635510296662287.png",[16,14349,14350],{},"Step 3 Start up emulator and take a look at storage now.",[16,14352,14353],{},[1139,14354,14356],{"href":14355},"\u002Farticles\u002Fimages\u002Fimage_636635510300830063.png",[156,14357],{"style":12186,"title":158,"src":14358,"alt":158,"width":14359,"height":14360,"border":8404},"\u002Farticles\u002Fimages\u002Fimage_thumb_636635510304088087.png",181,319,{"title":1080,"searchDepth":1081,"depth":1081,"links":14362},[],"2018-06-02T19:33:00.000Z","Changing the size of emulator memory as a result of INSTALL_FAILED_INSUFFICIENT_STORAGE error message.  Using the following information you can resize the memory allocated to particular android emulator.",{},"\u002Farticles\u002Fxamarin-android-device-manager-diskdatapartitionsize",{"title":14296,"description":14364},"articles\u002Fxamarin-android-device-manager-diskdatapartitionsize",[9200],"FQg2AVDtJFEVZK1j13-8ho-HWvJYPApSvpnabHJdVBg",{"id":14372,"title":14373,"author":8,"body":14374,"createdAt":14421,"description":1915,"extension":1101,"img":14418,"meta":14422,"navigation":1104,"path":14423,"seo":14424,"stem":14425,"tags":14426,"updatedAt":14421,"__hash__":14427},"articles\u002Farticles\u002Ftfs-build-2015-not-transforming-web-config.md","TFS Build 2015 Not Transforming Web.Config",{"type":10,"value":14375,"toc":14419},[14376,14379,14382],[16,14377,14378],{},"The following is the solution that addressed this problem. While setting up a project for TFS build, I came across issues with the build system not transforming my web.config to different configurations. i.e. I want my web.config to be transformed with web.config.release upon build\u002Fpublish. I found the following solution that worked for me.",[16,14380,14381],{},"Within Visual Studio, unload the web project (in this case I am working with a web application), scroll to the bottom and add the following task. On the build server you can ensure that the path is valid and it is referencing the most appropriate version. The UsingTask imports the TransformXml method from Microsoft.Web.Publishing.Tasks.dll",[14383,14384,14387,14398,14399,14409,14410],"using-task",{"taskname":14385,"assemblyfile":14386},"TransformXml","$(MSBuildExtensionsPath)\\Microsoft\\VisualStudio\\v14.0\\Web\\Microsoft.Web.Publishing.Tasks.dll",[14388,14389,14392],"target",{"name":14390,"condition":14391},"ApplyTransform","Exists('Web.$(Configuration).config')",[14393,14394],"transform-xml",{"source":14395,"transform":14396,"destination":14397},"web.config","Web.$(Configuration).config","Web.config"," \nThen within the BeforeBuild Target add ",[14388,14400,8216,14402],{"name":14401},"BeforeBuild",[14403,14404,11776,14406],"exec",{"command":14405},"attrib -r Web.config",[14407,14408],"calltarget",{"targets":14390},"   Exec removes the read-only attribute from the web.config file and the CallTarget will ApplyTransform target \n",[1139,14411,14414],{"style":14412,"href":14413},"display: none;width:65%","\u002Farticles\u002Fimages\u002Fopen-live-writer-7e779723aa75_11131-tfs2_2.png",[156,14415],{"title":14416,"style":14417,"border":8404,"alt":14416,"src":14418},"tfs2","border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px","\u002Farticles\u002Fimages\u002Fopen-live-writer-7e779723aa75_11131-tfs2_thumb.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":14420},[],"2017-05-29T20:59:16.1568524Z",{},"\u002Farticles\u002Ftfs-build-2015-not-transforming-web-config",{"title":14373,"description":1915},"articles\u002Ftfs-build-2015-not-transforming-web-config",[10945],"lOC0JMfw8ZGxSAnqXj8dgfW8SGFqPE_xBIFss2cj8pg",{"id":14429,"title":14430,"author":8,"body":14431,"createdAt":14523,"description":14435,"extension":1101,"img":14446,"meta":14524,"navigation":1104,"path":14525,"seo":14526,"stem":14527,"tags":14528,"updatedAt":14523,"__hash__":14529},"articles\u002Farticles\u002Fsql-server-profiler-trace-for-your-application.md","SQL Server Profiler - Trace for your Application",{"type":10,"value":14432,"toc":14521},[14433,14436,14439,14448,14451,14460,14471,14474,14483,14486,14496,14515],[16,14434,14435],{},"I want to watch the queries made by my application during development efforts.",[16,14437,14438],{},"Here is what I do… from SQL Server Management Studio, select SQL Server Profiler",[16,14440,14441],{},[1139,14442,14444],{"href":14443},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_2.png",[156,14445],{"style":8402,"src":14446,"border":8404,"alt":158,"title":158,"width":8450,"height":14447},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb.png",147,[16,14449,14450],{},"Start a new trace, providing the trace name (here I entered My Trace).  Select ‘Tuning’ for the ‘Use the Template’.  The Tuning template only watches the key events from SQL (RPC:Completed, SP:StmtCompleted, SQL:BatchCompleted).  Many of the other events while important just are not important to me at this point.",[16,14452,14453],{},[1139,14454,14456],{"href":14455},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_4.png",[156,14457],{"style":8402,"src":14458,"border":8404,"alt":158,"title":158,"width":14459,"height":12123},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb_1.png",326,[16,14461,14462,14463],{},"Select the columns of value to you, including ApplicationName, HostName, LoginName and DatabaseName.  I also like to add columns StartTime, EndTime and RowCounts\n",[1139,14464,14466],{"href":14465},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_8.png",[156,14467],{"style":8402,"src":14468,"border":8404,"alt":158,"title":158,"width":14469,"height":14470},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb_3.png",324,99,[16,14472,14473],{},"Select Column Filters.  Here we will only show the events from my Application.  The ApplicationName can be specified on your connection string and if you provide you can use here as a filter.  As shown I have provided the Like = ODOT and also I want to exclude (checkbox) all other applications but this one.  Note; You can use wildcards with the like filters i.e. % for wildcard",[16,14475,14476],{},[1139,14477,14479],{"href":14478},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_10.png",[156,14480],{"style":8402,"src":14481,"border":8404,"alt":158,"title":158,"width":14360,"height":14482},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb_4.png",251,[16,14484,14485],{},"Select ‘Ok’ and execute some SQL.  You will see in the trace ONLY your sql queries from your application.  Invaluable.  I often have profiler running while I am performing unit testing in order to see the generated sql execution.",[16,14487,14488],{},[1139,14489,14491],{"href":14490},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_12.png",[156,14492],{"style":8402,"src":14493,"border":8404,"alt":158,"title":158,"width":14494,"height":14495},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb_5.png",430,77,[16,14497,14498,14499,14501,14502,14504,14505,14507],{},"Above we are showing the Duration (Amount of elapsed time (in milliseconds) taken by the event.). ",[1118,14500],{},"\n ",[1118,14503],{},"\nTip: when complete you can use File Save As to save the newly created profile as a Template, then when you want to re-use for another application it will be there and available (the only modification would be changing the application name variable in the filter).",[1118,14506],{},[1139,14508,14510],{"href":14509},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_6.png",[156,14511],{"style":8402,"src":14512,"border":8404,"alt":158,"title":158,"width":14513,"height":14514},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-cdd803dd36c3_860d-image_thumb_2.png",322,205,[16,14516,11031,14517],{},[1139,14518,14520],{"href":14519,"target":1142},"https:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fms190176.aspx","SQL Server Profiler Templates MSDN",{"title":1080,"searchDepth":1081,"depth":1081,"links":14522},[],"2017-05-29T20:59:16.0698525Z",{},"\u002Farticles\u002Fsql-server-profiler-trace-for-your-application",{"title":14430,"description":14435},"articles\u002Fsql-server-profiler-trace-for-your-application",[8743],"HTBk5k_jTh3xjo-5-NdIUQxyV-IPi6QAU0VhquYLg8g",{"id":14531,"title":14532,"author":8,"body":14533,"createdAt":14557,"description":14558,"extension":1101,"img":14559,"meta":14560,"navigation":1104,"path":14561,"seo":14562,"stem":14563,"tags":14564,"updatedAt":14557,"__hash__":14565},"articles\u002Farticles\u002Fsql-server-2008-installation-ndash-not-so-quick.md","SQL Server 2008 Installation, not so quick",{"type":10,"value":14534,"toc":14555},[14535,14541,14544,14552],[16,14536,14537,14538,7815],{},"Before you rush to download SQL 2008 you may want to read the following KB article which warns that Visual Studio 2008 SP1 ‘may be required’ for SQL Server 2008 installations KB956139 (found ",[1139,14539,8578],{"href":14540,"target":1142},"http:\u002F\u002Fsupport.microsoft.com\u002Fkb\u002F956139",[16,14542,14543],{},"”Because certain SQL Server 2008 features install components that are also part of the release version of Visual Studio 2008 SP1, SQL Server 2008 requires Visual Studio 2008 with SP1. If Visual Studio 2008 without a service pack is installed instead, it may not work correctly after you install SQL Server 2008.“",[16,14545,14546,14547,14551],{},"Currently, ",[1139,14548,14550],{"href":14549,"target":1142},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Fvstudio\u002Fcc533448.aspx","Visual Studio 2008 Service Pack 1"," (SP1) is in beta at the current time.",[16,14553,14554],{},"I do not know the expected delivery of SP1 but should be soon (hang tight).",{"title":1080,"searchDepth":1081,"depth":1081,"links":14556},[],"2017-05-29T20:59:15.8643544Z","Before you rush to download SQL 2008 you may want to read the following KB article contained within this blog.","\u002Farticles\u002Fimages\u002Fl2oWZnThPG.png",{},"\u002Farticles\u002Fsql-server-2008-installation-ndash-not-so-quick",{"title":14532,"description":14558},"articles\u002Fsql-server-2008-installation-ndash-not-so-quick",[8743,7873],"uUgrYz6hVSOWfcqo-ApYDrtjGpXT3uL0jd9PBGOi3E8",{"id":14567,"title":14568,"author":8,"body":14569,"createdAt":15309,"description":14573,"extension":1101,"img":15305,"meta":15310,"navigation":1104,"path":15311,"seo":15312,"stem":15313,"tags":15314,"updatedAt":15309,"__hash__":15315},"articles\u002Farticles\u002Fgeneric-collections-and-filtering.md","Generic Collections and Filtering",{"type":10,"value":14570,"toc":15307},[14571,14574,14577,14580,14583,14586,14955,15301,15303],[16,14572,14573],{},"When dealing with collections the common question is how to filter them based on criteria. ",[16,14575,14576],{},"The following are a few techniques used to accomplish this.  A delegate is like a function pointer. ",[16,14578,14579],{},"A predicate is a method that returns true or false. ",[16,14581,14582],{},"In the case of List\u003CT> it is possible to pass it a delegate that is a function that returns true or false.",[16,14584,14585],{},"In the examples below I have base object a generic collection of those objects and am using the FindAll method to return only a few of the objects based on matching criteria.  There are a number of samples, just un-comment the ones of interest.   ",[9636,14587,12793,14589,14593,14594,14597,14598,11776,14602,14604,14605,14593,14608,14611,14612,11776,14614,14616,14617,3091,14621,14624,14625,14593,14628,14630,14631,11776,14633,14616,14635,3091,14637,14624,14640,14593,14643,14645,14646,11776,14648,14616,14650,3091,14653,14624,14656,14659,14660,14663,14664,14667,14668,14671,14672,14593,14675,11983,14682,14593,14685,11983,14688,14593,14691,11983,14694,14593,14697,11983,14700,14593,14703,11983,14706,14671,14709,14593,14712,11983,14715,14593,14718,11983,14721,14671,14724,14593,14727,11983,14730,14593,14733,11983,14736,14593,14739,11983,14742,14671,14745,14593,14748,11983,14753,14593,14756,8666,14759,14761,14762,11776,14764,14616,14767,14769,14770,14773,14774,14777,14778,14671,14781,14671,14784,14593,14787,11983,14792,14593,14795,11983,14798,14593,14801,11983,14804,14593,14807,14810,14671,14813,14671,14816,14593,14819,11983,14824,14593,14827,11983,14833,14593,14836,11983,14839,14593,14842,11983,14845,14593,14848,11983,14851,14593,14854,11983,14857,14593,14860,11983,14863,14593,14866,11983,14869,14593,14872,11983,14875,14593,14878,11983,14881,14593,14884,11983,14887,14671,14890,14593,14893,11983,14896,14593,14899,11983,14904,14593,14907,11983,14910,14593,14913,11983,14916,14593,14919,11983,14922,14593,14925,11983,14928,14593,14931,11983,14934,14593,14937,11983,14940,14593,14943,11983,14945,14593,14948,11983,14950,14593,14953,11776],{"style":14588},"font-size: 8pt; background: white; color: black; font-family: consolas",[4215,14590,14592],{"style":14591},"color: #2b91af","   23","             ",[4215,14595,14596],{"style":14591},"Persons"," personList = ",[4215,14599,14601],{"style":14600},"color: blue","new",[4215,14603,14596],{"style":14591},"();    ",[4215,14606,14607],{"style":14591},"   24",[4215,14609,14610],{"style":14591},"Person"," p1 = ",[4215,14613,14601],{"style":14600},[4215,14615,14610],{"style":14591},"(",[4215,14618,14620],{"style":14619},"color: #a31515","\"Rose\"",[4215,14622,14623],{"style":14619},"\"Bob\"",");    ",[4215,14626,14627],{"style":14591},"   25",[4215,14629,14610],{"style":14591}," p2 = ",[4215,14632,14601],{"style":14600},[4215,14634,14610],{"style":14591},[4215,14636,14620],{"style":14619},[4215,14638,14639],{"style":14619},"\"Phil\"",[4215,14641,14642],{"style":14591},"   26",[4215,14644,14610],{"style":14591}," p3 = ",[4215,14647,14601],{"style":14600},[4215,14649,14610],{"style":14591},[4215,14651,14652],{"style":14619},"\"Smith\"",[4215,14654,14655],{"style":14619},"\"Jack\"",[4215,14657,14658],{"style":14591},"   27","             personList.Add(p1);    ",[4215,14661,14662],{"style":14591},"   28","             personList.Add(p2);    ",[4215,14665,14666],{"style":14591},"   29","             personList.Add(p3);    ",[4215,14669,14670],{"style":14591},"   30","     ",[4215,14673,14674],{"style":14591},"   31",[4215,14676,14678,14679],{"style":14677},"color: green","\u002F\u002F",[19,14680,14681],{},"Sample 1 Using Predicate Technique (long form)",[4215,14683,14684],{"style":14591},"   32",[4215,14686,14687],{"style":14677},"\u002F\u002FPredicate\u003CPerson> filterByLastName;",[4215,14689,14690],{"style":14591},"   33",[4215,14692,14693],{"style":14677},"\u002F\u002FPersonFilter filter = new PersonFilter(\"Rose\");",[4215,14695,14696],{"style":14591},"   34",[4215,14698,14699],{"style":14677},"\u002F\u002FfilterByLastName = new Predicate\u003CPerson>(filter.FilterByLastName);",[4215,14701,14702],{"style":14591},"   35",[4215,14704,14705],{"style":14677},"\u002F\u002FList\u003CPerson> list = personList.FindAll(filterByLastName);",[4215,14707,14708],{"style":14591},"   36",[4215,14710,14711],{"style":14591},"   37",[4215,14713,14714],{"style":14677},"\u002F\u002FResponse.Write(\"Original Collection Count \" + personList.Count.ToString() + \"\u003Cbr \u002F>\");",[4215,14716,14717],{"style":14591},"   38",[4215,14719,14720],{"style":14677},"\u002F\u002FResponse.Write(\"Filtered List Count \" + list.Count.ToString() + \"\u003Cbr \u002F>\");",[4215,14722,14723],{"style":14591},"   39",[4215,14725,14726],{"style":14591},"   40",[4215,14728,14729],{"style":14677},"\u002F\u002F\u002F\u002F this is a shorter version and uses the RemoveAll method to items",[4215,14731,14732],{"style":14591},"   41",[4215,14734,14735],{"style":14677},"\u002F\u002FpersonList.RemoveAll(filterByLastName);",[4215,14737,14738],{"style":14591},"   42",[4215,14740,14741],{"style":14677},"\u002F\u002FResponse.Write(\"After persons removed from the collection Count \" + personList.Count.ToString());",[4215,14743,14744],{"style":14591},"   43",[4215,14746,14747],{"style":14591},"   44",[4215,14749,14678,14750],{"style":14677},[19,14751,14752],{},"Sample 2 shortform version",[4215,14754,14755],{"style":14591},"   45",[4215,14757,14758],{"style":14591},"List",[4215,14760,14610],{"style":14591},"> list2 = personList.FindAll(",[4215,14763,14601],{"style":14600},[4215,14765,14766],{"style":14591},"PersonFilter",[4215,14768,14620],{"style":14619},").FilterByLastName);    ",[4215,14771,14772],{"style":14591},"   46","             Response.Write(",[4215,14775,14776],{"style":14619},"\"Count \""," + list2.Count.ToString());",[4215,14779,14780],{"style":14591},"   47",[4215,14782,14783],{"style":14591},"   48",[4215,14785,14786],{"style":14591},"   49",[4215,14788,14678,14789],{"style":14677},[19,14790,14791],{},"Sample 3 using lambda expression",[4215,14793,14794],{"style":14591},"   50",[4215,14796,14797],{"style":14677},"\u002F\u002FList\u003CPerson> list3 = personList.FindAll(",[4215,14799,14800],{"style":14591},"   51",[4215,14802,14803],{"style":14677},"\u002F\u002F    r => r.LastName == \"Rose\");",[4215,14805,14806],{"style":14591},"   52",[4215,14808,14809],{"style":14677},"\u002F\u002FResponse.Write(\"Count \" + list3.Count.ToString());",[4215,14811,14812],{"style":14591},"   53",[4215,14814,14815],{"style":14591},"   54",[4215,14817,14818],{"style":14591},"   55",[4215,14820,14678,14821],{"style":14677},[19,14822,14823],{},"Sample 4 with arrays",[4215,14825,14826],{"style":14591},"   56",[4215,14828,14829,14830,14832],{"style":14677},"\u002F\u002FPerson",[4215,14831],{}," personList2 = {",[4215,14834,14835],{"style":14591},"   57",[4215,14837,14838],{"style":14677},"\u002F\u002F   new Person(\"Rose\", \"Bob\"),",[4215,14840,14841],{"style":14591},"   58",[4215,14843,14844],{"style":14677},"\u002F\u002F   new Person(\"Rose\", \"Phil\"),",[4215,14846,14847],{"style":14591},"   59",[4215,14849,14850],{"style":14677},"\u002F\u002F   new Person(\"Smith\", \"Jack\"),",[4215,14852,14853],{"style":14591},"   60",[4215,14855,14856],{"style":14677},"\u002F\u002F};",[4215,14858,14859],{"style":14591},"   61",[4215,14861,14862],{"style":14677},"\u002F\u002Foutputs each person in array",[4215,14864,14865],{"style":14591},"   62",[4215,14867,14868],{"style":14677},"\u002F\u002FArray.ForEach(personList2, delegate(Person p)",[4215,14870,14871],{"style":14591},"   63",[4215,14873,14874],{"style":14677},"\u002F\u002F{",[4215,14876,14877],{"style":14591},"   64",[4215,14879,14880],{"style":14677},"\u002F\u002F    Response.Write(p.LastName + \"\u003Cbr \u002F>\");",[4215,14882,14883],{"style":14591},"   65",[4215,14885,14886],{"style":14677},"\u002F\u002F});",[4215,14888,14889],{"style":14591},"   66",[4215,14891,14892],{"style":14591},"   67",[4215,14894,14895],{"style":14677},"\u002F\u002Foutputs each person after findall",[4215,14897,14898],{"style":14591},"   68",[4215,14900,14829,14901,14903],{"style":14677},[4215,14902],{}," personList3 = Array.FindAll(personList2, ",[4215,14905,14906],{"style":14591},"   69",[4215,14908,14909],{"style":14677},"\u002F\u002F    delegate (Person p)",[4215,14911,14912],{"style":14591},"   70",[4215,14914,14915],{"style":14677},"\u002F\u002F    {",[4215,14917,14918],{"style":14591},"   71",[4215,14920,14921],{"style":14677},"\u002F\u002F        return p.LastName == \"Rose\";",[4215,14923,14924],{"style":14591},"   72",[4215,14926,14927],{"style":14677},"\u002F\u002F    }",[4215,14929,14930],{"style":14591},"   73",[4215,14932,14933],{"style":14677},"\u002F\u002F);",[4215,14935,14936],{"style":14591},"   74",[4215,14938,14939],{"style":14677},"\u002F\u002FArray.ForEach(personList3, delegate(Person p)",[4215,14941,14942],{"style":14591},"   75",[4215,14944,14874],{"style":14677},[4215,14946,14947],{"style":14591},"   76",[4215,14949,14880],{"style":14677},[4215,14951,14952],{"style":14591},"   77",[4215,14954,14886],{"style":14677},[9636,14956,12793,14957,14960,14961,11776,14964,11776,14967,14969,14970,8666,14972,14974,14975,14671,14978,14960,14981,14983,14984,14987,14988,14991,14992,14671,14995,14671,14998,14671,15001,8422,15004,11776,15006,11776,15008,15010,15011,14671,15014,14960,15017,11776,15020,15023,15024,14960,15027,11776,15029,15031,15032,14960,15035,11776,15037,15039,15040,15043,15044,15010,15047,14593,15050,15023,15053,15056,15057,15043,15060,15010,15063,15066,15067,15070,15071,15056,15074,15077,15078,14960,15081,11776,15083,15085,15086,15043,15089,15010,15091,14593,15094,15031,15096,15056,15099,15043,15102,15010,15104,15107,15108,15070,15110,15056,15113,14987,15116,14671,15119,14960,15122,15124,15125,15127,15128,15130,15131,15134,15135,15138,15139,15077,15142,14671,15145,14991,15148,14671,15151,14671,15154,8422,15157,11776,15159,11776,15161,11983,15163,15010,15166,14671,15169,14960,15172,11776,15174,15176,15177,14671,15180,14960,15183,15185,15186,15188,15189,15192,15193,15196,15197,14987,15200,14671,15203,14960,15206,11776,15208,15211,15212,15214,15215,15192,15218,15043,15221,15224,15225,15228,15229,14593,15232,11776,15234,15070,15237,15056,15240,15043,15243,11776,15245,15070,15247,14987,15250,14671,15253,14671,15256,14960,15259,11776,15261,15263,15264,15214,15266,15192,15269,15043,15272,15274,15275,15228,15278,14593,15281,11776,15283,15070,15285,15056,15288,15043,15291,11776,15293,15070,15295,14987,15298,12476],{"style":14588},[4215,14958,14959],{"style":14591},"   86","     ",[4215,14962,14963],{"style":14600},"public",[4215,14965,14966],{"style":14600},"class",[4215,14968,14596],{"style":14591}," : System.Collections.Generic.",[4215,14971,14758],{"style":14591},[4215,14973,14610],{"style":14591},"> {    ",[4215,14976,14977],{"style":14591},"   87",[4215,14979,14980],{"style":14591},"   88",[4215,14982,14963],{"style":14600}," Persons() {    ",[4215,14985,14986],{"style":14591},"   89","     }    ",[4215,14989,14990],{"style":14591},"   90"," }    ",[4215,14993,14994],{"style":14591},"   91",[4215,14996,14997],{"style":14591},"   92",[4215,14999,15000],{"style":14591},"   93",[4215,15002,15003],{"style":14591},"   94",[4215,15005,14963],{"style":14600},[4215,15007,14966],{"style":14600},[4215,15009,14610],{"style":14591}," {    ",[4215,15012,15013],{"style":14591},"   95",[4215,15015,15016],{"style":14591},"   96",[4215,15018,15019],{"style":14600},"private",[4215,15021,15022],{"style":14600},"string"," _lastName;    ",[4215,15025,15026],{"style":14591},"   97",[4215,15028,15019],{"style":14600},[4215,15030,15022],{"style":14600}," _firstName;    ",[4215,15033,15034],{"style":14591},"   98",[4215,15036,14963],{"style":14600},[4215,15038,15022],{"style":14600}," LastName {    ",[4215,15041,15042],{"style":14591},"   99","         ",[4215,15045,15046],{"style":14600},"get",[4215,15048,15049],{"style":14591},"  100",[4215,15051,15052],{"style":14600},"return",[4215,15054,15055],{"style":14591},"  101","         }    ",[4215,15058,15059],{"style":14591},"  102",[4215,15061,15062],{"style":14600},"set",[4215,15064,15065],{"style":14591},"  103","             _lastName = ",[4215,15068,15069],{"style":14600},"value",";    ",[4215,15072,15073],{"style":14591},"  104",[4215,15075,15076],{"style":14591},"  105","     }        ",[4215,15079,15080],{"style":14591},"  106",[4215,15082,14963],{"style":14600},[4215,15084,15022],{"style":14600}," FirstName {    ",[4215,15087,15088],{"style":14591},"  107",[4215,15090,15046],{"style":14600},[4215,15092,15093],{"style":14591},"  108",[4215,15095,15052],{"style":14600},[4215,15097,15098],{"style":14591},"  109",[4215,15100,15101],{"style":14591},"  110",[4215,15103,15062],{"style":14600},[4215,15105,15106],{"style":14591},"  111","             _firstName = ",[4215,15109,15069],{"style":14600},[4215,15111,15112],{"style":14591},"  112",[4215,15114,15115],{"style":14591},"  113",[4215,15117,15118],{"style":14591},"  114",[4215,15120,15121],{"style":14591},"  115",[4215,15123,14963],{"style":14600}," Person(",[4215,15126,15022],{"style":14600}," lastName, ",[4215,15129,15022],{"style":14600}," firstName) {    ",[4215,15132,15133],{"style":14591},"  116","         _lastName = lastName;    ",[4215,15136,15137],{"style":14591},"  117","         _firstName = firstName;    ",[4215,15140,15141],{"style":14591},"  118",[4215,15143,15144],{"style":14591},"  119",[4215,15146,15147],{"style":14591},"  120",[4215,15149,15150],{"style":14591},"  121",[4215,15152,15153],{"style":14591},"  122",[4215,15155,15156],{"style":14591},"  123",[4215,15158,14963],{"style":14600},[4215,15160,14966],{"style":14600},[4215,15162,14766],{"style":14591},[4215,15164,15165],{"style":14591},"  124",[4215,15167,15168],{"style":14591},"  125",[4215,15170,15171],{"style":14591},"  126",[4215,15173,15019],{"style":14600},[4215,15175,15022],{"style":14600}," _match;    ",[4215,15178,15179],{"style":14591},"  127",[4215,15181,15182],{"style":14591},"  128",[4215,15184,14963],{"style":14600}," PersonFilter(",[4215,15187,15022],{"style":14600}," match)    ",[4215,15190,15191],{"style":14591},"  129","     {    ",[4215,15194,15195],{"style":14591},"  130","         _match = match;    ",[4215,15198,15199],{"style":14591},"  131",[4215,15201,15202],{"style":14591},"  132",[4215,15204,15205],{"style":14591},"  133",[4215,15207,14963],{"style":14600},[4215,15209,15210],{"style":14600},"bool"," FilterByLastName(",[4215,15213,14610],{"style":14591}," per)    ",[4215,15216,15217],{"style":14591},"  134",[4215,15219,15220],{"style":14591},"  135",[4215,15222,15223],{"style":14600},"if"," (per.LastName == _match)    ",[4215,15226,15227],{"style":14591},"  136","         {    ",[4215,15230,15231],{"style":14591},"  137",[4215,15233,15052],{"style":14600},[4215,15235,15236],{"style":14600},"true",[4215,15238,15239],{"style":14591},"  138",[4215,15241,15242],{"style":14591},"  139",[4215,15244,15052],{"style":14600},[4215,15246,9854],{"style":14600},[4215,15248,15249],{"style":14591},"  140",[4215,15251,15252],{"style":14591},"  141",[4215,15254,15255],{"style":14591},"  142",[4215,15257,15258],{"style":14591},"  143",[4215,15260,14963],{"style":14600},[4215,15262,15210],{"style":14600}," FilterByFirstName(",[4215,15265,14610],{"style":14591},[4215,15267,15268],{"style":14591},"  144",[4215,15270,15271],{"style":14591},"  145",[4215,15273,15223],{"style":14600}," (per.FirstName == _match)    ",[4215,15276,15277],{"style":14591},"  146",[4215,15279,15280],{"style":14591},"  147",[4215,15282,15052],{"style":14600},[4215,15284,15236],{"style":14600},[4215,15286,15287],{"style":14591},"  148",[4215,15289,15290],{"style":14591},"  149",[4215,15292,15052],{"style":14600},[4215,15294,9854],{"style":14600},[4215,15296,15297],{"style":14591},"  150",[4215,15299,15300],{"style":14591},"  151",[1118,15302],{},[156,15304],{"src":15305,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Ffilter.jpg","display:none;",{"title":1080,"searchDepth":1081,"depth":1081,"links":15308},[],"2017-05-29T20:59:15.8338506Z",{},"\u002Farticles\u002Fgeneric-collections-and-filtering",{"title":14568,"description":14573},"articles\u002Fgeneric-collections-and-filtering",[8723],"fUAFW_aqKskOuF4PIpWXrn1qMk6NyjR1YFeTVoFP0Go",{"id":15317,"title":15318,"author":8,"body":15319,"createdAt":15351,"description":15352,"extension":1101,"img":15348,"meta":15353,"navigation":1104,"path":15354,"seo":15355,"stem":15356,"tags":15357,"updatedAt":15351,"__hash__":15358},"articles\u002Farticles\u002Ftelerik-reporting-and-really-impressive.md","Telerik Reporting and Really Impressive",{"type":10,"value":15320,"toc":15349},[15321,15324,15327,15330,15333,15340],[16,15322,15323],{},"My experience with the relatively new Telerik reporting solution has been very positive.  In order to create a report you simply need a 3 dll’s within your solution and a data source.    The data source can be ANY ADO.NET data source as well as business objects, XML, Web Services etc. ",[16,15325,15326],{},"As the data source can be any ADO.NET source the reporting solution works against SQL Server, MySQL, Oracle, Access, OLE DB etc.  I have been a big fan of SQL Reporting Services for quite a while (moving to SQL RS many years ago as I ran from Crystal Reports). ",[16,15328,15329],{},"Unlike SQL RS it is a very fast install on local development workstation and nothing on the server is required.  The product is licensed by developer making utilization by the enterprise not dependent on the number of users.  This really works out well in the Internet type environment.    I found the the designer (within Visual Studio) to be very fast and easier to use that SQL RS.  The drag and drop features and the visual clues are clearly superior than other reporting solutions I have used.",[16,15331,15332],{},"Telerik Reporting supports the most commonly used output formats out-of-the-box: PDF, Excel, RTF, CSV, MHTML, BMP, GIF, JPEG, PNG, TIFF and metafile (EMF).  The Telerik product certainly makes it easy to find the data source, connect within Visual Studio and drag and drop the fields onto the design surface.",[16,15334,15335,15336],{},"More information can be found online at ",[1139,15337,15339],{"href":15338,"target":1142},"http:\u002F\u002Fwww.telerik.com\u002Fproducts\u002Freporting\u002Foverview.aspx","Telerik Reporting",[16,15341,15342],{},[1139,15343,15345],{"href":15344},"\u002Farticles\u002Fimages\u002Fimage_4.png",[156,15346],{"title":158,"style":15347,"height":13051,"alt":158,"src":15348,"width":8473,"border":8404},"border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px","\u002Farticles\u002Fimages\u002Fimage_thumb_1.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":15350},[],"2017-05-29T20:59:15.8038514Z","Experience with Telerik Reporting",{},"\u002Farticles\u002Ftelerik-reporting-and-really-impressive",{"title":15318,"description":15352},"articles\u002Ftelerik-reporting-and-really-impressive",[8526],"VnOxxF6UPPJZuAeC8AeVTJrgkQ8VbTy23tLzCccb3Vs",{"id":15360,"title":15361,"author":8,"body":15362,"createdAt":15555,"description":15556,"extension":1101,"img":1915,"meta":15557,"navigation":1104,"path":15558,"seo":15559,"stem":15560,"tags":15561,"updatedAt":15555,"__hash__":15563},"articles\u002Farticles\u002Ffeature-exists-activated-on-spsite.md","Feature Exists (Activated on SPSite)",{"type":10,"value":15363,"toc":15553},[15364,15367,15550],[16,15365,15366],{},"Method to iterate through SharePoint SPSite collection to check to\nsee if a feature (featureGuid) exists.  If found, method returns true.",[2232,15368,15371,15382,15390,15394,15400,15405,15413,15418,15425,15432,15439,15444,15450,15457,15464,15469,15476,15481,15488,15495,15502,15512,15518,15524,15531,15538,15545],{"className":15369},[15370],"csharpcode",[4215,15372,15374,15380],{"style":15373},"font-family: Consolas; font-size: x-small;",[4215,15375,15376],{"style":15373},[4215,15377,15378],{"style":15373},[4215,15379,8422],{"style":15373},[4215,15381,8422],{"style":15373},[4215,15383,15385],{"style":15384},"font-family: Consolas; color: #0000ff; font-size: x-small;",[4215,15386,15387],{"style":15384},[4215,15388,15389],{"style":15384}," private",[4215,15391,15392],{"style":15373},[4215,15393,11776],{"style":15373},[4215,15395,15396],{"style":15384},[4215,15397,15398],{"style":15384},[4215,15399,15210],{"style":15384},[4215,15401,15402],{"style":15373},[4215,15403,15404],{"style":15373}," FeatureExists(",[4215,15406,15408],{"style":15407},"font-family: Consolas; color: #2b91af; font-size: x-small;",[4215,15409,15410],{"style":15407},[4215,15411,15412],{"style":15407},"SPSite",[4215,15414,15415],{"style":15373},[4215,15416,15417],{"style":15373}," siteCollection, ",[4215,15419,15420],{"style":15407},[4215,15421,15422],{"style":15407},[4215,15423,15424],{"style":15407},"Guid",[4215,15426,15427,15430],{"style":15373},[4215,15428,15429],{"style":15373}," featureGuid) {",[4215,15431,8422],{"style":15373},[4215,15433,15434],{"style":15384},[4215,15435,15436],{"style":15384},[4215,15437,15438],{"style":15384},"    bool",[4215,15440,15441],{"style":15373},[4215,15442,15443],{"style":15373}," found = ",[4215,15445,15446],{"style":15384},[4215,15447,15448],{"style":15384},[4215,15449,9854],{"style":15384},[4215,15451,15452,15455],{"style":15373},[4215,15453,15454],{"style":15373},";",[4215,15456,8422],{"style":15373},[4215,15458,15459],{"style":15384},[4215,15460,15461],{"style":15384},[4215,15462,15463],{"style":15384},"    foreach",[4215,15465,15466],{"style":15373},[4215,15467,15468],{"style":15373}," (",[4215,15470,15471],{"style":15407},[4215,15472,15473],{"style":15407},[4215,15474,15475],{"style":15407},"SPFeature",[4215,15477,15478],{"style":15373},[4215,15479,15480],{"style":15373}," feature ",[4215,15482,15483],{"style":15384},[4215,15484,15485],{"style":15384},[4215,15486,15487],{"style":15384},"in",[4215,15489,15490,15493],{"style":15373},[4215,15491,15492],{"style":15373}," siteCollection.Features) {",[4215,15494,8422],{"style":15373},[4215,15496,15497],{"style":15384},[4215,15498,15499],{"style":15384},[4215,15500,15501],{"style":15384},"    if",[4215,15503,15504],{"style":15373},[4215,15505,15506,15507],{"style":15373}," (feature.DefinitionId == featureGuid) {\n",[4215,15508,15509],{"style":15373},[4215,15510,15511],{"style":15373},"      found = ",[4215,15513,15514],{"style":15384},[4215,15515,15516],{"style":15384},[4215,15517,15236],{"style":15384},[4215,15519,15520,15522],{"style":15373},[4215,15521,15454],{"style":15373},[4215,15523,8422],{"style":15373},[4215,15525,15526],{"style":15384},[4215,15527,15528],{"style":15384},[4215,15529,15530],{"style":15384},"      break",[4215,15532,15533,15536],{"style":15373},[4215,15534,15535],{"style":15373},";    }  }",[4215,15537,8422],{"style":15373},[4215,15539,15540],{"style":15384},[4215,15541,15542],{"style":15384},[4215,15543,15544],{"style":15384}," return",[4215,15546,15547],{"style":15373},[4215,15548,15549],{"style":15373}," found;} ",[16,15551,15552],{},"Cool eh?",{"title":1080,"searchDepth":1081,"depth":1081,"links":15554},[],"2017-05-29T20:59:15.5333517Z","Iterate through SharePoint SPSite collection",{},"\u002Farticles\u002Ffeature-exists-activated-on-spsite",{"title":15361,"description":15556},"articles\u002Ffeature-exists-activated-on-spsite",[15562],"sharepoint","HNB5xxrT3JuSE5aSwOI_YI0ghRpedBgb1Wc6au43Yp4",{"id":15565,"title":15566,"author":8,"body":15567,"createdAt":15600,"description":1080,"extension":1101,"img":1915,"meta":15601,"navigation":1104,"path":15602,"seo":15603,"stem":15604,"tags":15605,"updatedAt":15600,"__hash__":15606},"articles\u002Farticles\u002Fvisual-studio-2012-extensions-to-help-you-cope-with-change.md","Visual Studio 2012 Extensions To Help you cope with Change",{"type":10,"value":15568,"toc":15598},[15569],[48,15570,15571,15580,15589],{},[51,15572,15573,15577,15578,14501],{},[1139,15574,15576],{"href":15575,"target":1142},"http:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F366ad100-0003-4c9a-81a8-337d4e7ace05","Visual Studio 2012 Color Theme Editor"," extension! This extension provides you with seven new color themes to choose from as well as the ability to easily create new custom themes.",[1118,15579],{},[51,15581,15582,15586,15587,14501],{},[1139,15583,15585],{"href":15584,"target":1142},"http:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F48dd9c4d-3ba6-4805-9a1f-09099e9af015","All Caps Menu Options","  Allows you to turn all caps in menu titles on and off in the Visual Studio options dialog.",[1118,15588],{},[51,15590,15591,15595,15596,14501],{},[1139,15592,15593],{"title":15593,"href":15594,"target":1142},"AttachTo","http:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002Fd0265ab0-df51-4100-8e10-1f84403c4cd0"," Adds \"Attach to IIS\u002FIIS Express\u002FNUnit\" commands to the Tools menu.",[1118,15597],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":15599},[],"2017-05-29T20:59:15.4218512Z",{},"\u002Farticles\u002Fvisual-studio-2012-extensions-to-help-you-cope-with-change",{"title":15566,"description":1080},"articles\u002Fvisual-studio-2012-extensions-to-help-you-cope-with-change",[8526],"eXEyG5IDOxaAKmdaBzuOQXOkXQO1g5mp6uQo0RU9m-o",{"id":15608,"title":15609,"author":8,"body":15610,"createdAt":15718,"description":15719,"extension":1101,"img":15720,"meta":15721,"navigation":1104,"path":15722,"seo":15723,"stem":15724,"tags":15725,"updatedAt":15718,"__hash__":15726},"articles\u002Farticles\u002Fjquery-mvc-and-textarea-length-validation.md","jQuery \u002F MVC and TextArea Length Validation",{"type":10,"value":15611,"toc":15716},[15612,15615,15621,15624,15627,15714],[16,15613,15614],{},"I came across this issue today, and actually surprised I have not had to resolve this problem earlier.",[16,15616,15617,15618,15620],{},"When validating a textarea on the client side with jQuery unobtrusive validation (for length) you have to be conscientious about how JavaScript deals with carriage return\u002Fline feed characters in comparison to the posted values to your controller.  For example on the client JavaScript sees CR\u002FLF as \\n while after posted to the server that same CR\u002FLF will be represented by \\r\\n.  If you are validating the user entered data for length your counts will be different depending on the environment (i.e. model will pass validation on the client but fail on the server).",[1118,15619],{},"\nThe resolution was to fix the data server side.",[16,15622,15623],{},"This was done with a customization\u002Fextension to the DefaultModelBinder, so that all controller actions will benefit immediately.",[16,15625,15626],{},"You will notice that I trimmed the original input and then replaced \\r\\n with \\n.",[2232,15628,15630],{"className":9998,"code":15629,"language":10000,"meta":1080,"style":1080},"        protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)  \n        {  \n            base.BindProperty(controllerContext, bindingContext, propertyDescriptor);  \n  \n            \u002F\u002F Note: if desired, one could restrict the conversion to properties decorated with [StringLength]:  \n            \u002F\u002F &amp;&amp; propertyDescriptor.Attributes.OfType().Any()  \n            if (propertyDescriptor.PropertyType == typeof(string))  \n            {  \n                var originalString = propertyDescriptor.GetValue(bindingContext.Model) as string;  \n                if (!string.IsNullOrEmpty(originalString))  \n                {  \n                    originalString = originalString.Trim();  \n                    var stringWithNormalizedNewlines = originalString.Replace(\"\\r\\n\", \"\\n\");  \n                    propertyDescriptor.SetValue(bindingContext.Model, stringWithNormalizedNewlines);  \n                }  \n            }  \n        }\n",[2239,15631,15632,15637,15641,15646,15650,15655,15660,15665,15670,15675,15680,15685,15690,15695,15700,15705,15710],{"__ignoreMap":1080},[4215,15633,15634],{"class":4217,"line":4218},[4215,15635,15636],{},"        protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)  \n",[4215,15638,15639],{"class":4217,"line":1081},[4215,15640,11626],{},[4215,15642,15643],{"class":4217,"line":1084},[4215,15644,15645],{},"            base.BindProperty(controllerContext, bindingContext, propertyDescriptor);  \n",[4215,15647,15648],{"class":4217,"line":4234},[4215,15649,10274],{},[4215,15651,15652],{"class":4217,"line":4240},[4215,15653,15654],{},"            \u002F\u002F Note: if desired, one could restrict the conversion to properties decorated with [StringLength]:  \n",[4215,15656,15657],{"class":4217,"line":4246},[4215,15658,15659],{},"            \u002F\u002F &amp;&amp; propertyDescriptor.Attributes.OfType().Any()  \n",[4215,15661,15662],{"class":4217,"line":4252},[4215,15663,15664],{},"            if (propertyDescriptor.PropertyType == typeof(string))  \n",[4215,15666,15667],{"class":4217,"line":4258},[4215,15668,15669],{},"            {  \n",[4215,15671,15672],{"class":4217,"line":4264},[4215,15673,15674],{},"                var originalString = propertyDescriptor.GetValue(bindingContext.Model) as string;  \n",[4215,15676,15677],{"class":4217,"line":4270},[4215,15678,15679],{},"                if (!string.IsNullOrEmpty(originalString))  \n",[4215,15681,15682],{"class":4217,"line":4276},[4215,15683,15684],{},"                {  \n",[4215,15686,15687],{"class":4217,"line":4282},[4215,15688,15689],{},"                    originalString = originalString.Trim();  \n",[4215,15691,15692],{"class":4217,"line":4288},[4215,15693,15694],{},"                    var stringWithNormalizedNewlines = originalString.Replace(\"\\r\\n\", \"\\n\");  \n",[4215,15696,15697],{"class":4217,"line":4294},[4215,15698,15699],{},"                    propertyDescriptor.SetValue(bindingContext.Model, stringWithNormalizedNewlines);  \n",[4215,15701,15702],{"class":4217,"line":4300},[4215,15703,15704],{},"                }  \n",[4215,15706,15707],{"class":4217,"line":4306},[4215,15708,15709],{},"            }  \n",[4215,15711,15712],{"class":4217,"line":4312},[4215,15713,7343],{},[4682,15715,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":15717},[],"2017-05-29T20:59:15.3883517Z","Surprised about a jQuery issue.","\u002Farticles\u002Fimages\u002Fc1zuUO5OvF.png",{},"\u002Farticles\u002Fjquery-mvc-and-textarea-length-validation",{"title":15609,"description":15719},"articles\u002Fjquery-mvc-and-textarea-length-validation",[5166,8994],"A1TBFqd_HmSDNRRkH9XShYU1vUr45yBIdO-DMLgubPI",{"id":15728,"title":15729,"author":1915,"body":15730,"createdAt":15892,"description":15893,"extension":1101,"img":15884,"meta":15894,"navigation":1104,"path":15895,"seo":15896,"stem":15897,"tags":15898,"updatedAt":15892,"__hash__":15899},"articles\u002Farticles\u002Fnode-js-server-side-javascript-process-consuming-too-much-memory.md","Node.js server-side JavaScript process consuming too much memory",{"type":10,"value":15731,"toc":15890},[15732,15735,15738,15859,15862,15865,15868,15887],[16,15733,15734],{},"After the installation of Visual Studio 2017 latest edition, I have been watching memory consumption. Node.exe seems to be consistently around 500-700mb of RAM!. I did find this post which helps explain what is going on.",[16,15736,15737],{},"The node process you are seeing is powering the JavaScript language service. You will see this process appear anytime you edit a JS file, TS file, or any file with JS\u002FTS inside (html, cshtml, etc). This process is what powers IntelliSense, code navigation, formatting, and other editing features and it does this by analyzing the entire context of your project. If you have a lot of .js files in your project, this can get large, but more than likely the issue is that you have a lot of library files that are being analyzed. By default, we will scan every .js\u002F.ts file in your project. But you can override this behavior and tune the language service to only focus on your code. To do this create a tsconfig.json in your project root with the following settings:”",[2232,15739,15741],{"className":8240,"code":15740,"language":8242,"meta":1080,"style":1080},"{\n    \"compilerOptions\": {\n        \"allowJs\": true,\n        \"noEmit\": true\n    },\n    \"exclude\": [\n        \"wwwroot\u002Flib\" \u002F\u002Fignore everything in the lib folder (bootstrap, jquery, etc)  \n        \u002F\u002F add any other folders with library code here\n    ],\n    \"typeAcquisition\": { \n        \"enable\": true,\n        \"include\": [\n            \"bootstrap\"\n            \"jquery\"  \u002F\u002Flist libraries you are using here\n        ]\n    }\n}  \n",[2239,15742,15743,15748,15755,15767,15776,15781,15789,15797,15802,15807,15815,15826,15833,15838,15846,15851,15855],{"__ignoreMap":1080},[4215,15744,15745],{"class":4217,"line":4218},[4215,15746,15747],{"class":8259},"{\n",[4215,15749,15750,15753],{"class":4217,"line":1081},[4215,15751,15752],{"class":4669},"    \"compilerOptions\"",[4215,15754,9910],{"class":8259},[4215,15756,15757,15760,15762,15764],{"class":4217,"line":1084},[4215,15758,15759],{"class":4669},"        \"allowJs\"",[4215,15761,3087],{"class":8259},[4215,15763,15236],{"class":8255},[4215,15765,15766],{"class":8259},",\n",[4215,15768,15769,15772,15774],{"class":4217,"line":4234},[4215,15770,15771],{"class":4669},"        \"noEmit\"",[4215,15773,3087],{"class":8259},[4215,15775,9934],{"class":8255},[4215,15777,15778],{"class":4217,"line":4240},[4215,15779,15780],{"class":8259},"    },\n",[4215,15782,15783,15786],{"class":4217,"line":4246},[4215,15784,15785],{"class":4669},"    \"exclude\"",[4215,15787,15788],{"class":8259},": [\n",[4215,15790,15791,15794],{"class":4217,"line":4252},[4215,15792,15793],{"class":4669},"        \"wwwroot\u002Flib\"",[4215,15795,15796],{"class":8249}," \u002F\u002Fignore everything in the lib folder (bootstrap, jquery, etc)  \n",[4215,15798,15799],{"class":4217,"line":4258},[4215,15800,15801],{"class":8249},"        \u002F\u002F add any other folders with library code here\n",[4215,15803,15804],{"class":4217,"line":4264},[4215,15805,15806],{"class":8259},"    ],\n",[4215,15808,15809,15812],{"class":4217,"line":4270},[4215,15810,15811],{"class":4669},"    \"typeAcquisition\"",[4215,15813,15814],{"class":8259},": { \n",[4215,15816,15817,15820,15822,15824],{"class":4217,"line":4276},[4215,15818,15819],{"class":4669},"        \"enable\"",[4215,15821,3087],{"class":8259},[4215,15823,15236],{"class":8255},[4215,15825,15766],{"class":8259},[4215,15827,15828,15831],{"class":4217,"line":4282},[4215,15829,15830],{"class":4669},"        \"include\"",[4215,15832,15788],{"class":8259},[4215,15834,15835],{"class":4217,"line":4288},[4215,15836,15837],{"class":4669},"            \"bootstrap\"\n",[4215,15839,15840,15843],{"class":4217,"line":4294},[4215,15841,15842],{"class":4669},"            \"jquery\"",[4215,15844,15845],{"class":8249},"  \u002F\u002Flist libraries you are using here\n",[4215,15847,15848],{"class":4217,"line":4300},[4215,15849,15850],{"class":8259},"        ]\n",[4215,15852,15853],{"class":4217,"line":4306},[4215,15854,7437],{"class":8259},[4215,15856,15857],{"class":4217,"line":4312},[4215,15858,9887],{"class":8259},[16,15860,15861],{},"Another option",[16,15863,15864],{},"Disabling the TypeScript extension is a workaround for the moment, at least for me. Click Tools, Extensions and Updates, search for \"TypeScript\" and disable it. Restart Visual Studio.”",[16,15866,15867],{},"Give it a try and let me know how it goes.",[16,15869,11031,15870,15873,15876,15878],{},[1139,15871],{"title":15872,"href":15872},"https:\u002F\u002Fdevelopercommunity.visualstudio.com\u002Fcontent\u002Fproblem\u002F27033\u002Fnodejs-server-side-javascript-process-consuming-to.html",[1139,15874,15872],{"href":15872,"rel":15875},[3695],[1118,15877],{},[1139,15879,15882],{"style":15880,"href":15881},"display: none;","\u002Farticles\u002Fimages\u002Fopen-live-writer-nodjs-server-side-javascript-process-co_13be9-js_2.png",[156,15883],{"style":8402,"title":8242,"src":15884,"alt":8242,"width":15885,"height":15886,"border":8404},"\u002Farticles\u002Fimages\u002Fopen-live-writer-nodjs-server-side-javascript-process-co_13be9-js_thumb.png",203,156,[4682,15888,15889],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":15891},[],"2017-03-17T06:10:45.510Z","After the installation of Visual Studio 2017 latest edition, I have been watching memory consumption.  Node.exe seems to be consistently around 500-700mb of RAM!.  I did find this post which helps explain what is going on.",{},"\u002Farticles\u002Fnode-js-server-side-javascript-process-consuming-too-much-memory",{"title":15729,"description":15893},"articles\u002Fnode-js-server-side-javascript-process-consuming-too-much-memory",[8526,6989],"tfPFLFfbdUgW8RNm41oUcBHq_jakGfUAHcj1hY7w06Y",{"id":15901,"title":15902,"author":1915,"body":15903,"createdAt":15984,"description":15985,"extension":1101,"img":15954,"meta":15986,"navigation":1104,"path":15987,"seo":15988,"stem":15989,"tags":15990,"updatedAt":15984,"__hash__":15991},"articles\u002Farticles\u002Fforms-master-detail-template.md","Xamarin Forms Master Detail Template",{"type":10,"value":15904,"toc":15982},[15905,15908,15916,15921,15935,15940,15943,15946,15957,15965],[16,15906,15907],{},"The current Xamarin Forms master detail template is broken. You will get an error like Error CS0101 The namespace 'already contains a definition for",[16,15909,15910,15911,7815],{},"The fix..(thank you ",[1139,15912,15915],{"href":15913,"target":1142,"rel":15914},"https:\u002F\u002Fforums.xamarin.com\u002Fprofile\u002F120906\u002FKymPhillpotts.3866",[6921],"Kym Phillpotts",[2652,15917,15918],{},[51,15919,15920],{},"It would appear, that the added pages have the wrong namespace. So change the namespace on the added pages",[48,15922,15923,15926,15929,15932],{},[51,15924,15925],{},"Page1.xaml.cs - change the Namespace to be just MyApp",[51,15927,15928],{},"Page1Detail.xaml.cs - Change the namespace to be just MyApp",[51,15930,15931],{},"Page1Master.xaml.cs - Change the namespace to be just MyApp",[51,15933,15934],{},"Page1MenuItem.cs - Change the namespace to \"MyApp\"",[2652,15936,15937],{"start":1081},[51,15938,15939],{},"I also noticed that in the Page1Master.xaml.cs it is incorrectly referencing the MenuItems.  It says Page1MenuItems = new ObservableCollection...Change that to be justMenuItems = new ObservableCollection...",[16,15941,15942],{},"No you can go to your App.Xaml.xs and set the Page1 as the master page:",[16,15944,15945],{},"eg.MainPage = new MyApp.Page1()",[16,15947,15948],{},[1139,15949,15951],{"href":15950},"\u002Farticle\u002Fimages\u002Fopen-live-writer-70a95c1575c8_decb-image_2.png",[156,15952],{"style":15953,"title":158,"src":15954,"alt":158,"width":15955,"height":15956,"border":8404},"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;","\u002Farticles\u002Fimages\u002Fopen-live-writer-70a95c1575c8_decb-image_thumb.png",428,296,[16,15958,11031,15959,15962],{},[1139,15960],{"title":15961,"href":15961},"https:\u002F\u002Fforums.xamarin.com\u002Fdiscussion\u002F89346\u002Fforms-master-detail-page-generation-is-broken",[1139,15963,15961],{"href":15961,"rel":15964},[3695],[16,15966,15967,15968,15970,15973,15976,15979],{},"Also there are bugs in Bugzilla for both of these:",[1118,15969],{},[1139,15971],{"href":15972},"https:\u002F\u002Fbugzilla.xamarin.com\u002Fshow_bug.cgi?id=53020",[1139,15974,15972],{"href":15972,"rel":15975},[3695],[1139,15977],{"href":15978},"https:\u002F\u002Fbugzilla.xamarin.com\u002Fshow_bug.cgi?id=53021",[1139,15980,15978],{"href":15978,"rel":15981},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":15983},[],"2017-03-14T13:20:03.000Z","The current Xamarin Forms master detail template is broken.  You will get an error like Error CS0101 The namespace 'already contains a definition for.",{},"\u002Farticles\u002Fforms-master-detail-template",{"title":15902,"description":15985},"articles\u002Fforms-master-detail-template",[9200],"INsVAI3syQmOBP5U9aqAwo-8SVPG9zLItscvwFjbZ8Y",{"id":15993,"title":15994,"author":1915,"body":15995,"createdAt":16100,"description":16101,"extension":1101,"img":13981,"meta":16102,"navigation":1104,"path":16103,"seo":16104,"stem":16105,"tags":16106,"updatedAt":16100,"__hash__":16107},"articles\u002Farticles\u002Fkeep-nuget-packages-out-of-tfs-source-control.md","Keep Nuget Packages Out of TFS (Source Control)",{"type":10,"value":15996,"toc":16098},[15997,16007,16010,16013,16016,16019,16053,16056,16059,16062,16065,16068,16077,16080,16088,16096],[16,15998,15999],{},[1139,16000,16002],{"style":15880,"href":16001},"\u002Farticles\u002Fimages\u002Fopen-live-writer-keep-nuget-packages-out-of-tfs-source-co_8714-tfs3_2.png",[156,16003],{"style":8402,"title":16004,"src":16005,"alt":16004,"width":8450,"height":16006,"border":8404},"tfs3","\u002Farticles\u002Fimagesopen-live-writer-keep-nuget-packages-out-of-tfs-source-co_8714-tfs3_thumb.png",135,[16,16008,16009],{},"Historically, we had kept our Nuget packages in Team Foundation Server (version control). Due to the recent consistency and stability of Nuget I am starting to move towards excluding Nuget packages from TFS Source control. They just are not required anymore and Visual Studio can very quickly restore from the internet packages locally on your workstation\u002Fbuild server very quickly now.",[16,16011,16012],{},"So, how do we setup both Visual Studio and TFS to stop putting packages in TFS? Donovan Brown published a post describing the steps.",[16,16014,16015],{},"a) At the solution level (at same location where your sln file is located) create a folder named .nuget (do this from within Source Control Explorer)",[16,16017,16018],{},"b) Create a file named nuget.config and put this within the .nuget folder. This file should have the following content.",[2232,16020,16022],{"className":9025,"code":16021,"language":9027,"meta":1080,"style":1080},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cconfiguration> \n    \u003Csolution> \n        \u003Cadd key=\"disableSolutionControlIntegration\" value=\"true\">\u003C\u002Fadd>\n    \u003C\u002Fsolution>\n\u003C\u002Fconfiguration>\n",[2239,16023,16024,16028,16033,16038,16043,16048],{"__ignoreMap":1080},[4215,16025,16026],{"class":4217,"line":4218},[4215,16027,9034],{},[4215,16029,16030],{"class":4217,"line":1081},[4215,16031,16032],{},"\u003Cconfiguration> \n",[4215,16034,16035],{"class":4217,"line":1084},[4215,16036,16037],{},"    \u003Csolution> \n",[4215,16039,16040],{"class":4217,"line":4234},[4215,16041,16042],{},"        \u003Cadd key=\"disableSolutionControlIntegration\" value=\"true\">\u003C\u002Fadd>\n",[4215,16044,16045],{"class":4217,"line":4240},[4215,16046,16047],{},"    \u003C\u002Fsolution>\n",[4215,16049,16050],{"class":4217,"line":4246},[4215,16051,16052],{},"\u003C\u002Fconfiguration>\n",[16,16054,16055],{},"c) Create a file .tfignore and put at the solution level also. Within this text file put a single word packages",[16,16057,16058],{},"So at this point, you have a directory .nuget with the nuget.config file within it, and also a text file .tfignore at the solution level. Remove any packages that have been put in source control previously and check in.",[16,16060,16061],{},"At this point, close Visual Studio and restart.",[16,16063,16064],{},"Build the solution locally and all should be good, do a check in and if everything is good the packages folder is not checked in. Tada Essentially, we are putting things in place to tell Visual Studio not to check in packages AND we are telling TFS not to check in the packages folder.\nBoth the config file and the .tfignore files are needed.",[16,16066,16067],{},"My solution folder looks like",[16,16069,16070],{},[1139,16071,16073],{"href":16072},"\u002Farticles\u002Fimages\u002Fopen-live-writer-keep-nuget-packages-out-of-tfs-source-co_8714-image_2.png",[156,16074],{"style":8402,"title":158,"src":16075,"alt":158,"width":16076,"height":13044,"border":8404},"\u002Farticles\u002Fimages\u002Fopen-live-writer-keep-nuget-packages-out-of-tfs-source-co_8714-image_thumb.png",436,[16,16078,16079],{},"Reference:",[16,16081,16082,16085],{},[1139,16083],{"title":16084,"href":16084},"http:\u002F\u002Fdonovanbrown.com\u002Fpost\u002FHow-to-keep-packages-folder-out-of-TFVC",[1139,16086,16084],{"href":16084,"rel":16087},[3695],[16,16089,16090,16093],{},[1139,16091],{"title":16092,"href":16092},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BfKcTX8NxAQ",[1139,16094,16092],{"href":16092,"rel":16095},[3695],[4682,16097,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":16099},[],"2017-02-24T07:48:53.130Z","Historically, we had kept our Nuget packages in Team Foundation Server (version control).  Due to the recent consistency and stability of Nuget I am starting to move towards excluding Nuget packages from TFS Source control.  They just are not required anymore and Visual Studio can very quickly restore from the internet packages locally on your workstation\u002Fbuild server very quickly now.",{},"\u002Farticles\u002Fkeep-nuget-packages-out-of-tfs-source-control",{"title":15994,"description":16101},"articles\u002Fkeep-nuget-packages-out-of-tfs-source-control",[10945],"7RYOC6n0dlrpGmS5Zj2PwVk1brKlHnvXsy7VkN0m97w",{"id":16109,"title":16110,"author":8,"body":16111,"createdAt":16192,"description":1915,"extension":1101,"img":16122,"meta":16193,"navigation":1104,"path":16194,"seo":16195,"stem":16196,"tags":16197,"updatedAt":16192,"__hash__":16198},"articles\u002Farticles\u002Fno-ios-simulator-or-device-appear-on-visual-studio.md","No IOS simulator or device appear on Visual Studio",{"type":10,"value":16112,"toc":16190},[16113,16124,16130,16132,16144,16147,16156,16171,16178,16181],[16,16114,16115],{},[1139,16116,16119],{"style":16117,"href":16118},"display: none","\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-xamarinios_2.png",[156,16120],{"title":16121,"style":14417,"border":8404,"alt":16121,"src":16122,"width":14447,"height":16123},"xamarinios","\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-xamarinios_thumb.png",128,[16,16125,16126,16127],{},"Ok, once again – I open a Xamarin Forms app, ensure I have the latest Xamarin Forms version in each of the PCL, Android and IOS projects. The project rebuild works for the PCL and Android projects and fails for the IOS. The error… ",[1128,16128,16129],{},"No valid iOS code signing keys found in keychain.",[1128,16131],{},[16,16133,16134,16143],{},[1128,16135,16136,16137,16140],{},"You need to request a codesigning certificate from\n",[1139,16138],{"href":16139},"https:\u002F\u002Fdeveloper.apple.com",[1139,16141,16139],{"href":16139,"rel":16142},[3695]," What’s going on…I first look to ensure my Mac agent is connected yep, perform a clean and rebuild of each project..same error. The solution for me…. Open the dialog “Xamarin Mac Agent” – right click on the connect Mac – choose ‘Disconnect’. After disconnection – select the Mac and ‘Connect’…waiting (aha …it won’t connect, this could be the problem) Nope – didn’t think it would be this easy. I was able to use the ‘show simulator’ option within vs.net and the simulator popped open on the Mac. I opened another project to see if this issue was related to the specific project. Nope. The 2nd project I opened had the same issue, where in the ‘Device’ list the was no option for ‘iphone simulator’.",[16,16145,16146],{},"I then proceed to open Xamarin Studio on the Mac (currently I am using the Beta channel as this was necessary to work with Visual Studio 2017). There is an update and it started to download. Here is to more hope that this solves the issue.",[16,16148,16149],{},[1139,16150,16152],{"href":16151},"\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-image_2.png",[156,16153],{"title":158,"style":16154,"border":8404,"alt":158,"src":16155,"width":13488,"height":12337},"border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px","\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-image_thumb.png",[16,16157,16158,16159,16163,16164],{},"This update on the Mac will move it up to ",[1139,16160,16162],{"href":16161,"target":1142},"https:\u002F\u002Freleases.xamarin.com\u002Frelease-candidate-cycle-9-rc6-refresh\u002F","Xamarin Studio 6.2.0"," I tried to find the IOS Simulator after this update. Still nothing. I removed all mac agents, restarted vs.net 2017 a couple times, still nothing. I opened up another project and magically this time the ‘iphone simulator’ option was available. Why…no idea..(this product is going to kill me)\n",[1139,16165,16167],{"href":16166},"\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-image_4.png",[156,16168],{"title":158,"style":16154,"border":8404,"alt":158,"src":16169,"width":16170,"height":4423},"\u002Farticles\u002Fimages\u002Fimages\u002Fopen-live-writer-i_c801-image_thumb_1.png",479,[16,16172,16173,16174,16177],{},"So now I am thinking there is a difference between the 2 projects. Why would I have the simulator option in one but not the other? This is really messed up. So I open the project that does not have the ‘iphonesimulator’ option, I can see within Configuration Manager that this option exists ",[19,16175,16176],{},"and ","I can connect, build, deploy to Mac simulator.",[16,16179,16180],{},"Well this scenario is new to me…no idea.",[16,16182,16183],{},[1139,16184,16186],{"href":16185},"\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-image_6.png",[156,16187],{"title":158,"style":16154,"border":8404,"alt":158,"src":16188,"width":8450,"height":16189},"\u002Farticles\u002Fimages\u002Fopen-live-writer-i_c801-image_thumb_2.png",171,{"title":1080,"searchDepth":1081,"depth":1081,"links":16191},[],"2017-02-18T08:07:02.3200000-05:00",{},"\u002Farticles\u002Fno-ios-simulator-or-device-appear-on-visual-studio",{"title":16110,"description":1915},"articles\u002Fno-ios-simulator-or-device-appear-on-visual-studio",[9200],"4n4VwoebArTKwJ97QT4guPzoyBnHAnofJjW9sIKPOVM",{"id":16200,"title":16201,"author":8,"body":16202,"createdAt":16380,"description":16381,"extension":1101,"img":16214,"meta":16382,"navigation":1104,"path":16383,"seo":16384,"stem":16385,"tags":16386,"updatedAt":16380,"__hash__":16387},"articles\u002Farticles\u002Fthe-type-object-is-defined-in-an-assembly-that-is-not-referenced-you-must-add-a-reference-to-assembly-mscorlib-version-2-0-5-0.md","The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0",{"type":10,"value":16203,"toc":16378},[16204,16207,16217,16324,16327,16330,16375],[16,16205,16206],{},"Another day, another issue while building a Xamarin project. In this case, I was building a project from Xamarin and working through some logic. When building the Android project I was presented with the following build errors. I am getting use to different errors at the most unexpected times. This issue was not unlike others that I have come up against with my cross-device mobile development efforts. The good news, after much hunting and packing I found the solution. See below.",[16,16208,16209],{},[1139,16210,16212],{"href":16211},"\u002Farticles\u002Fimages\u002Fopen-live-writer-6b25ff33673e_d99f-image_5.png",[156,16213],{"title":158,"style":16154,"border":8404,"alt":158,"src":16214,"width":16215,"height":16216},"\u002Farticles\u002Fimages\u002Fopen-live-writer-6b25ff33673e_d99f-image_thumb_1.png",657,458,[2232,16218,16220],{"className":8648,"code":16219,"language":8650,"meta":1080,"style":1080},"Severity Code Description Project File Line Suppression State\nError CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral,\n\nPublicKeyToken=7cec85d7bea7798e'. GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0234 The type or namespace name 'TargetFrameworkAttributeAttribute' does not exist in the namespace 'System.Runtime.Versioning' (are you missing an assembly reference?) GreatQuotes.Android\n\nC:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0234 The type or namespace name 'TargetFrameworkAttribute' does not exist in the namespace 'System.Runtime.Versioning' (are you missing an assembly reference?) \nGreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0246 The type or namespace name 'FrameworkDisplayName' could not be found (are you missing a using directive or an assembly reference?) GreatQuotes.Android\n\nC:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.Object' \nis not defined or imported \nGreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\nError CS0518 Predefined type 'System.Void' is not defined or imported GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0012 The type 'Object' is defined in an assembly that is not referenced. \n\nYou must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\n\nError CS0246 The type or namespace name 'Icon' could not be found (are you missing a using directive or an assembly reference?) GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0518 Predefined type 'System.Object' is not defined or imported GreatQuotes.Android \n\nC:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\nError CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 \n\nResources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.\nGreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active  \n",[2239,16221,16222,16227,16232,16236,16241,16245,16250,16255,16259,16264,16269,16274,16279,16283,16288,16292,16297,16301,16306,16311,16315,16320],{"__ignoreMap":1080},[4215,16223,16224],{"class":4217,"line":4218},[4215,16225,16226],{"class":8259},"Severity Code Description Project File Line Suppression State\n",[4215,16228,16229],{"class":4217,"line":1081},[4215,16230,16231],{"class":8259},"Error CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral,\n",[4215,16233,16234],{"class":4217,"line":1084},[4215,16235,4231],{"emptyLinePlaceholder":1104},[4215,16237,16238],{"class":4217,"line":4234},[4215,16239,16240],{"class":8259},"PublicKeyToken=7cec85d7bea7798e'. GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0234 The type or namespace name 'TargetFrameworkAttributeAttribute' does not exist in the namespace 'System.Runtime.Versioning' (are you missing an assembly reference?) GreatQuotes.Android\n",[4215,16242,16243],{"class":4217,"line":4240},[4215,16244,4231],{"emptyLinePlaceholder":1104},[4215,16246,16247],{"class":4217,"line":4246},[4215,16248,16249],{"class":8259},"C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0234 The type or namespace name 'TargetFrameworkAttribute' does not exist in the namespace 'System.Runtime.Versioning' (are you missing an assembly reference?) \n",[4215,16251,16252],{"class":4217,"line":4252},[4215,16253,16254],{"class":8259},"GreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0246 The type or namespace name 'FrameworkDisplayName' could not be found (are you missing a using directive or an assembly reference?) GreatQuotes.Android\n",[4215,16256,16257],{"class":4217,"line":4258},[4215,16258,4231],{"emptyLinePlaceholder":1104},[4215,16260,16261],{"class":4217,"line":4264},[4215,16262,16263],{"class":8259},"C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Users\\dyardy\\AppData\\Local\\Temp\\MonoAndroid,Version=v7.1.AssemblyAttributes.cs 4 ActiveError CS0518 Predefined type 'System.Object' \n",[4215,16265,16266],{"class":4217,"line":4270},[4215,16267,16268],{"class":8259},"is not defined or imported \n",[4215,16270,16271],{"class":4217,"line":4276},[4215,16272,16273],{"class":8259},"GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\n",[4215,16275,16276],{"class":4217,"line":4282},[4215,16277,16278],{"class":8259},"Error CS0518 Predefined type 'System.Void' is not defined or imported GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0012 The type 'Object' is defined in an assembly that is not referenced. \n",[4215,16280,16281],{"class":4217,"line":4288},[4215,16282,4231],{"emptyLinePlaceholder":1104},[4215,16284,16285],{"class":4217,"line":4294},[4215,16286,16287],{"class":8259},"You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\n",[4215,16289,16290],{"class":4217,"line":4300},[4215,16291,4231],{"emptyLinePlaceholder":1104},[4215,16293,16294],{"class":4217,"line":4306},[4215,16295,16296],{"class":8259},"Error CS0246 The type or namespace name 'Icon' could not be found (are you missing a using directive or an assembly reference?) GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0518 Predefined type 'System.Object' is not defined or imported GreatQuotes.Android \n",[4215,16298,16299],{"class":4217,"line":4312},[4215,16300,4231],{"emptyLinePlaceholder":1104},[4215,16302,16303],{"class":4217,"line":4318},[4215,16304,16305],{"class":8259},"C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 Resources\\Start\\GreatQuotes.Android\\App.cs 9 Active\n",[4215,16307,16308],{"class":4217,"line":4324},[4215,16309,16310],{"class":8259},"Error CS0518 Predefined type 'System.String' is not defined or imported GreatQuotes.Android C:\\Xamarin\\10a_xam300\\Lab Materials\\Part 01 \n",[4215,16312,16313],{"class":4217,"line":4330},[4215,16314,4231],{"emptyLinePlaceholder":1104},[4215,16316,16317],{"class":4217,"line":4336},[4215,16318,16319],{"class":8259},"Resources\\Start\\GreatQuotes.Android\\App.cs 9 ActiveError CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.\n",[4215,16321,16322],{"class":4217,"line":4342},[4215,16323,16273],{"class":8259},[16,16325,16326],{},"The solution (to make a very long story short) was to unload the project from Visual Studio. Open the csproj and add the following reference (in bold). I initially was comparing some of my working Android projects with this one that just would not build.",[16,16328,16329],{},"I noticed the reference to mscorlib. I tried to add a reference to this dll directly through ‘Add Reference’ but I got the following error \"mscorlib.dll\" component is already automatically referenced. The build system should add this reference for you.  Since I could not add through the VS.NET interface, i chose to add via csproj file. After reloading the project and rebuilding the reference to mscorlib was visible in the list of references and finally my project built fine.",[2232,16331,16333],{"className":9025,"code":16332,"language":9027,"meta":1080,"style":1080},"\u003CItemGroup> \n    \u003CReference Include=\"Mono.Android\" \u002F>\n    \u003CReference Include=\"mscorlib\" \u002F>\n    \u003CReference Include=\"System\" \u002F> \n    \u003CReference Include=\"System.Xml\" \u002F> \n    \u003CReference Include=\"System.Core\" \u002F> \n    \u003CReference Include=\"System.Xml.Linq\" \u002F>\n\u003C\u002FItemGroup>\n",[2239,16334,16335,16340,16345,16350,16355,16360,16365,16370],{"__ignoreMap":1080},[4215,16336,16337],{"class":4217,"line":4218},[4215,16338,16339],{},"\u003CItemGroup> \n",[4215,16341,16342],{"class":4217,"line":1081},[4215,16343,16344],{},"    \u003CReference Include=\"Mono.Android\" \u002F>\n",[4215,16346,16347],{"class":4217,"line":1084},[4215,16348,16349],{},"    \u003CReference Include=\"mscorlib\" \u002F>\n",[4215,16351,16352],{"class":4217,"line":4234},[4215,16353,16354],{},"    \u003CReference Include=\"System\" \u002F> \n",[4215,16356,16357],{"class":4217,"line":4240},[4215,16358,16359],{},"    \u003CReference Include=\"System.Xml\" \u002F> \n",[4215,16361,16362],{"class":4217,"line":4246},[4215,16363,16364],{},"    \u003CReference Include=\"System.Core\" \u002F> \n",[4215,16366,16367],{"class":4217,"line":4252},[4215,16368,16369],{},"    \u003CReference Include=\"System.Xml.Linq\" \u002F>\n",[4215,16371,16372],{"class":4217,"line":4258},[4215,16373,16374],{},"\u003C\u002FItemGroup>\n",[4682,16376,16377],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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":1080,"searchDepth":1081,"depth":1081,"links":16379},[],"2017-02-12T08:38:11.7100000-05:00","This issue was not unlike others that I have come up against with my cross-device mobile development efforts.",{},"\u002Farticles\u002Fthe-type-object-is-defined-in-an-assembly-that-is-not-referenced-you-must-add-a-reference-to-assembly-mscorlib-version-2-0-5-0",{"title":16201,"description":16381},"articles\u002Fthe-type-object-is-defined-in-an-assembly-that-is-not-referenced-you-must-add-a-reference-to-assembly-mscorlib-version-2-0-5-0",[9200],"RHG4SC8nF4gbrv4fVY5o1UgRK9wxXwly9sZS5lhbuJA",{"id":16389,"title":16390,"author":8,"body":16391,"createdAt":16428,"description":1915,"extension":1101,"img":16424,"meta":16429,"navigation":1104,"path":16430,"seo":16431,"stem":16432,"tags":16433,"updatedAt":16428,"__hash__":16434},"articles\u002Farticles\u002Funable-to-start-build-4-3-0-664-agent-when-building-ios-apps.md","Unable to start Build 4.3.0.664 agent. when building iOS apps",{"type":10,"value":16392,"toc":16426},[16393,16396,16399,16402,16405,16408,16410],[16,16394,16395],{},"Starting up Visual Studio 2017 RC today, opening a Xamarin Forms application and building",[16,16397,16398],{},"I am presented with…\n“Unable to start Build 4.3.0.664 agent. when building iOS apps”",[16,16400,16401],{},"Uggh, yes another build issue.  So before I can do anything I must once again work through connectivity, emulator, build errors.  Note, if you venture to go in this direction with your learning\u002Fcareer patience is a must.",[16,16403,16404],{},"1.) Delete this folder:\nC:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\Extensions\\Xamarin",[16,16406,16407],{},"2.) Delete this folder:\nC:\\Users{username}\\AppData\\Local\\Microsoft\\VisualStudio\\15.0_3bcaeaa8\n(this hash needs to correspond to the instance of VS 2017 you are using)   I am using 2017 RC.4+26206.0 right now by the way.",[16,16409,11769],{},[16,16411,16412,16415,11776,16418],{},[1139,16413],{"title":16414,"href":16414},"https:\u002F\u002Fbugzilla.xamarin.com\u002Fshow_bug.cgi?id=52320",[1139,16416,16414],{"href":16414,"rel":16417},[3695],[1139,16419,16421],{"style":16117,"href":16420},"\u002Farticles\u002Fimages\u002Fopen-live-writer-f3509fbbd236_cabe-xambear_2.png",[156,16422],{"title":16423,"style":14417,"border":8404,"alt":16423,"src":16424,"width":16425,"height":8450},"xambear","\u002Farticles\u002Fimages\u002Fopen-live-writer-f3509fbbd236_cabe-xambear_thumb.png",238,{"title":1080,"searchDepth":1081,"depth":1081,"links":16427},[],"2017-02-11T07:30:20.2700000-05:00",{},"\u002Farticles\u002Funable-to-start-build-4-3-0-664-agent-when-building-ios-apps",{"title":16390,"description":1915},"articles\u002Funable-to-start-build-4-3-0-664-agent-when-building-ios-apps",[9200],"Bvk7DkjOIcwpBI7iCzu8qpkqzDHOQEEgIXovxsIBVhQ",{"id":16436,"title":16437,"author":8,"body":16438,"createdAt":16506,"description":1915,"extension":1101,"img":16447,"meta":16507,"navigation":1104,"path":16508,"seo":16509,"stem":16510,"tags":16511,"updatedAt":16506,"__hash__":16512},"articles\u002Farticles\u002Fxamarin-unable-to-debug-android-application.md","Xamarin Unable to Debug Android Application",{"type":10,"value":16439,"toc":16504},[16440,16448,16454,16457,16466,16469,16478,16486,16488,16496],[16,16441,16442],{},[1139,16443,16445],{"style":16117,"href":16444},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-xambear_2.png",[156,16446],{"title":16423,"style":14417,"border":8404,"alt":16423,"src":16447,"width":16425,"height":8450},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-xambear_thumb.png",[16,16449,16450,16451],{},"Using Visual Studio 2017 and opening small Xamarin forms application, building then debug-run I get the following error in the output window. This occurred while using the Visual Studio Android emulator.\n",[1128,16452,16453],{},"“Android application is debugging.\nCould not connect to the debugger.”",[16,16455,16456],{},"The solution was to open Hyper-V Manager, find the emulator (ensure that the emulator is shutdown), Settings – Processor then select ‘Migrate to a physical computer…’",[16,16458,16459],{},[1139,16460,16462],{"href":16461},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-image_2.png",[156,16463],{"title":158,"style":14417,"border":8404,"alt":158,"src":16464,"width":14459,"height":16465},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-image_thumb.png",310,[16,16467,16468],{},"While this seemed like the complete solution it wasn’t. One of my projects I could debug while the other one I could not. I compared the two csproj files and found this difference.",[16,16470,16471],{},[1139,16472,16474],{"href":16473},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-image_4.png",[156,16475],{"title":158,"style":16154,"border":8404,"alt":158,"src":16476,"width":16477,"height":4487},"\u002Farticles\u002Fimages\u002Fopen-live-writer-xamarin-unable-to-debug-android-applicat_83e7-image_thumb_1.png",594,[16,16479,16480,16481,16485],{},"Once I set my project option to ",[16482,16483,16484],"debug-symbols",{},"True"," it worked, and I could F5 Debug the solution\u002Fproject.",[16,16487,11769],{},[16,16489,16490,16493],{},[1139,16491],{"title":16492,"href":16492},"https:\u002F\u002Fdeveloper.xamarin.com\u002Fguides\u002Fandroid\u002Fdeployment,_testing,_and_metrics\u002Fdebug-on-emulator\u002Fvisual-studio-android-emulator\u002F#Troubleshooting",[1139,16494,16492],{"href":16492,"rel":16495},[3695],[16,16497,16498,16501],{},[1139,16499],{"title":16500,"href":16500},"http:\u002F\u002Fdotnetbyexample.blogspot.com\u002F2016\u002F02\u002Ffix-for-could-not-connect-to-debugger.html",[1139,16502,16500],{"href":16500,"rel":16503},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":16505},[],"2017-02-07T02:28:10.7500000-05:00",{},"\u002Farticles\u002Fxamarin-unable-to-debug-android-application",{"title":16437,"description":1915},"articles\u002Fxamarin-unable-to-debug-android-application",[9200],"xEMm429S_KQM-tgQHYtY0p4LQ9fk8AFAFkSktelwbHI",{"id":16514,"title":16515,"author":8,"body":16516,"createdAt":16593,"description":16594,"extension":1101,"img":16521,"meta":16595,"navigation":1104,"path":16596,"seo":16597,"stem":16598,"tags":16599,"updatedAt":16593,"__hash__":16600},"articles\u002Farticles\u002Fvisual-studio-2017-ios-build-debug-error.md","Visual Studio 2017 IOS Build Debug Error",{"type":10,"value":16517,"toc":16591},[16518,16524,16527,16566,16569,16572,16580,16589],[156,16519],{"title":16520,"style":14417,"border":8404,"alt":16520,"src":16521,"width":16522,"height":16523},"xam","\u002Farticles\u002Fimages\u002Fopen-live-writer-visual-studio-2017ios-build-debug-error_c406-xam_thumb.png",132,121,[16,16525,16526],{},"Ok, I got my Visual Studio Android emulator working, see prior blog post. Now focusing on IOS debug-run with a connected Mac.\nI got the following error..  Severity Code Description Project File Line Suppression State",[2232,16528,16530],{"className":8648,"code":16529,"language":8650,"meta":1080,"style":1080},"Error Could not copy the assembly '\u002FLibrary\u002FFrameworks\u002FXamarin.iOS.framework\u002FVersions\u002F10.4.0.97\u002Flib\u002Fmono\u002FXamarin.iOS\u002Fmscorlib.dll' to \n'\u002FUsers\u002Fdavidyardy\u002FLibrary\u002FCaches\u002FXamarin\u002Fmtbs\u002Fbuilds\u002FApp1.iOS\u002F820c43b5a93f812c648bedcbb5cd7ad5\u002Fbin\u002FiPhoneSimulator\u002FDebug\u002FApp1.iOS.app\u002F.monotouch-64\u002Fmscorlib.dll': \n\nAccess to the path \n\"\u002FLibrary\u002FFrameworks\u002FXamarin.iOS.framework\u002FVersions\u002F10.4.0.97\u002Flib\u002Fmono\u002FXamarin.iOS\u002Fmscorlib.dll.mdb\" \nor \"\u002FUsers\u002Fdavidyardy\u002FLibrary\u002FCaches\u002FXamarin\u002Fmtbs\u002Fbuilds\u002FApp1.iOS\u002F820c43b5a93f812c648bedcbb5cd7ad5\u002Fbin\u002FiPhoneSimulator\u002FDebug\u002FApp1.iOS.app\u002F.monotouch-64\u002Fmscorlib.dll.mdb\" is denied. \nApp1.iOS   \n",[2239,16531,16532,16537,16542,16546,16551,16556,16561],{"__ignoreMap":1080},[4215,16533,16534],{"class":4217,"line":4218},[4215,16535,16536],{"class":8259},"Error Could not copy the assembly '\u002FLibrary\u002FFrameworks\u002FXamarin.iOS.framework\u002FVersions\u002F10.4.0.97\u002Flib\u002Fmono\u002FXamarin.iOS\u002Fmscorlib.dll' to \n",[4215,16538,16539],{"class":4217,"line":1081},[4215,16540,16541],{"class":8259},"'\u002FUsers\u002Fdavidyardy\u002FLibrary\u002FCaches\u002FXamarin\u002Fmtbs\u002Fbuilds\u002FApp1.iOS\u002F820c43b5a93f812c648bedcbb5cd7ad5\u002Fbin\u002FiPhoneSimulator\u002FDebug\u002FApp1.iOS.app\u002F.monotouch-64\u002Fmscorlib.dll': \n",[4215,16543,16544],{"class":4217,"line":1084},[4215,16545,4231],{"emptyLinePlaceholder":1104},[4215,16547,16548],{"class":4217,"line":4234},[4215,16549,16550],{"class":8259},"Access to the path \n",[4215,16552,16553],{"class":4217,"line":4240},[4215,16554,16555],{"class":8259},"\"\u002FLibrary\u002FFrameworks\u002FXamarin.iOS.framework\u002FVersions\u002F10.4.0.97\u002Flib\u002Fmono\u002FXamarin.iOS\u002Fmscorlib.dll.mdb\" \n",[4215,16557,16558],{"class":4217,"line":4246},[4215,16559,16560],{"class":8259},"or \"\u002FUsers\u002Fdavidyardy\u002FLibrary\u002FCaches\u002FXamarin\u002Fmtbs\u002Fbuilds\u002FApp1.iOS\u002F820c43b5a93f812c648bedcbb5cd7ad5\u002Fbin\u002FiPhoneSimulator\u002FDebug\u002FApp1.iOS.app\u002F.monotouch-64\u002Fmscorlib.dll.mdb\" is denied. \n",[4215,16562,16563],{"class":4217,"line":4252},[4215,16564,16565],{"class":8259},"App1.iOS\n",[16,16567,16568],{},"I made sure that my Mac Agent was connected and all seemed good there. I opened the with Xamarin Studio (on the Mac) and had the exact same error. Ok so this error is not isolated to only Visual Studio (or worse yet just 2017). I now have the problem on both Mac and Windows.",[16,16570,16571],{},"This could be related to the beta release\u002Fchannel of Xamarin. Ok, so the resolution was found with this bug\u002Fresolution posted here",[16,16573,16574,16577],{},[1139,16575],{"title":16576,"href":16576},"https:\u002F\u002Fbugzilla.xamarin.com\u002Fshow_bug.cgi?id=52113",[1139,16578,16576],{"href":16576,"rel":16579},[3695],[16,16581,16582,16583,16585,16586,16588],{},"The full workaround is:",[1118,16584],{},"\nsudo chmod 0644 \u002FLibrary\u002FFrameworks\u002FXamarin.iOS.framework\u002FVersions\u002FCurrent\u002Flib\u002Fmono\u002F",[1128,16587,10888],{},".mdb",[4682,16590,16377],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":16592},[],"2017-02-05T04:02:44.7100000-05:00","Visual Studio and building IOS application",{},"\u002Farticles\u002Fvisual-studio-2017-ios-build-debug-error",{"title":16515,"description":16594},"articles\u002Fvisual-studio-2017-ios-build-debug-error",[9200],"4aE_tqAmn0sxAwUmT9lVPkIatZrjaCo1WRB0ak5dzjA",{"id":16602,"title":16603,"author":8,"body":16604,"createdAt":16819,"description":16820,"extension":1101,"img":16611,"meta":16821,"navigation":1104,"path":16822,"seo":16823,"stem":16824,"tags":16825,"updatedAt":16819,"__hash__":16826},"articles\u002Farticles\u002Fstarting-emulator-for-avd-phone-x86-toolsforapachecordova.md","Starting emulator for AVD 'Phone_x86_ToolsForApacheCordova",{"type":10,"value":16605,"toc":16817},[16606,16612,16619,16644,16647,16649,16657,16672,16682,16688,16691,16694,16702,16711,16719,16722,16732,16735,16747,16750,16759,16762,16771,16774,16782,16785,16793,16803,16809,16812,16815],[1139,16607,16609],{"href":16608,"style":15306},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-xam_2.png",[156,16610],{"title":16520,"style":14417,"border":8404,"alt":16520,"src":16611,"width":16522,"height":16523},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-xam_thumb.png",[16,16613,16614,16615,16618],{},"Starting emulator with ",[9125,16616,16617],{},"Visual Studio 2017 RC"," error -",[2232,16620,16622],{"className":8648,"code":16621,"language":8650,"meta":1080,"style":1080},"“Starting emulator for AVD 'Phone_x86_ToolsForApacheCordova'emulator: \nERROR: x86 emulation currently requires hardware acceleration!Please ensure \nIntel HAXM is properly installed and usable.CPU acceleration status: \nPlease disable Hyper-V before using the Android Emulator. \n",[2239,16623,16624,16629,16634,16639],{"__ignoreMap":1080},[4215,16625,16626],{"class":4217,"line":4218},[4215,16627,16628],{"class":8259},"“Starting emulator for AVD 'Phone_x86_ToolsForApacheCordova'emulator: \n",[4215,16630,16631],{"class":4217,"line":1081},[4215,16632,16633],{"class":8259},"ERROR: x86 emulation currently requires hardware acceleration!Please ensure \n",[4215,16635,16636],{"class":4217,"line":1084},[4215,16637,16638],{"class":8259},"Intel HAXM is properly installed and usable.CPU acceleration status: \n",[4215,16640,16641],{"class":4217,"line":4234},[4215,16642,16643],{"class":8259},"Please disable Hyper-V before using the Android Emulator.\n",[16,16645,16646],{},"Start a command prompt as Administrator, run 'bcdedit \u002Fset hypervisorlaunchtype off', reboot.”",[16,16648,11769],{},[16,16650,16651,16654],{},[1139,16652],{"title":16653,"href":16653},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F26355645\u002Ferror-in-launching-avd-with-amd-processor",[1139,16655,16653],{"href":16653,"rel":16656},[3695],[2232,16658,16660],{"className":8648,"code":16659,"language":8650,"meta":1080,"style":1080},"C:\\Program Files (x86)\\Android\\android-sdk\\extras\\intel\\Hardware_Accelerated_Execution_Manager >intelhaxm-android.exe \nDisable Hyper V - dism.exe \u002FOnline \u002FDisable-Feature:Microsoft-Hyper-V  \n",[2239,16661,16662,16667],{"__ignoreMap":1080},[4215,16663,16664],{"class":4217,"line":4218},[4215,16665,16666],{"class":8259},"C:\\Program Files (x86)\\Android\\android-sdk\\extras\\intel\\Hardware_Accelerated_Execution_Manager >intelhaxm-android.exe \n",[4215,16668,16669],{"class":4217,"line":1081},[4215,16670,16671],{"class":8259},"Disable Hyper V - dism.exe \u002FOnline \u002FDisable-Feature:Microsoft-Hyper-V\n",[16,16673,16674],{},[1139,16675,16677],{"href":16676},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_2.png",[156,16678],{"title":158,"style":14417,"border":8404,"alt":158,"src":16679,"width":16680,"height":16681},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb.png",334,255,[16,16683,16684],{},[1139,16685,16687],{"href":16686,"target":1142},"http:\u002F\u002Fhttps:\u002F\u002Fsoftware.intel.com\u002Fen-us\u002Fandroid\u002Farticles\u002Finstallation-instructions-for-intel-hardware-accelerated-execution-manager-windows","Installation Instructions for Intel® Hardware Accelerated Execution Manager (Intel® HAXM) - Microsoft Windows*",[16,16689,16690],{},"At this point, I felt that it must have been disabled in my BIOS. Taking another moment I started looking for the Visual Studio Android emulator (this is the one that I had used after Xamarin Player was deprecated. I found that I could start this manually by searching for Visual Studio Emulator for Android.",[16,16692,16693],{},"It would start fine but Visual Studio would not allow me to deploy to it.  I went back to the Visual Studio 2017 installer and then found an individual component “Visual Studio Emulator for Android” that was not installed. I selected and proceeded to install. You can follow these instructions on how to find the 2017 installer",[16,16695,16696,16699],{},[1139,16697],{"title":16698,"href":16698},"https:\u002F\u002Fdeveloper.xamarin.com\u002Fguides\u002Fcross-platform\u002Ftroubleshooting\u002Fquestions\u002Fvisualstudio-2017-rc\u002F",[1139,16700,16698],{"href":16698,"rel":16701},[3695],[16,16703,16704],{},[1139,16705,16707],{"href":16706},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_4.png",[156,16708],{"title":158,"style":16154,"border":8404,"alt":158,"src":16709,"width":11296,"height":16710},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_1.png",294,[16,16712,16713],{},[1139,16714,16716],{"href":16715},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_6.png",[156,16717],{"title":158,"style":16154,"border":8404,"alt":158,"src":16718,"width":8450,"height":16523},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_2.png",[16,16720,16721],{},"Now after above installation it found on the Tools menu",[16,16723,16724],{},[1139,16725,16727],{"href":16726},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_16.png",[156,16728],{"title":158,"style":16154,"border":8404,"alt":158,"src":16729,"width":16730,"height":16731},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_7.png",298,350,[16,16733,16734],{},"Launch – so I returned to my simple template App and hit debug run with “7 KitKat (4.5)..” emulator. This time the Visual Studio Android emulator started. This is small progress. Watching the Output window however I noticed the following error.",[16,16736,16737],{},[1128,16738,16739,16740,16743,16744],{},"02-04 12:47:32.605 D\u002FMono ( 1267): AOT module 'mscorlib.dll.so' not found: dlopen failed: library \"\u002Fdata\u002Fapp-lib\u002FApp1.Droid-2\u002Flibaot-mscorlib.dll.so\" not found02-04 12:47:32.605 D\u002FMono ( 1267): AOT module '\u002FUsers\u002Fbuilder\u002Fdata\u002Flanes\u002F4009\u002F3d959b66\u002Fsource\u002Fmonodroid\u002Fbuilds\u002Finstall\u002Fmono-x86\u002Flib\u002Fmono\u002Faot-cache\u002Fx86\u002Fmscorlib.dll.so' not found: dlopen failed: library \"\u002Fdata\u002Fapp-lib\u002FApp1.Droid-2\u002Flibaot-mscorlib.dll.so\" not found02-04 12:47:32.621 D\u002FMono ( 1267): Config attempting to parse: 'mscorlib.dll.config'.02-04 12:47:32.621 D\u002FMono ( 1267): Config attempting to parse: '\u002FUsers\u002Fbuilder\u002Fdata\u002Flanes\u002F4009\u002F3d959b66\u002Fsource\u002Fmonodroid\u002Fbuilds\u002Finstall\u002Fmono-x86\u002Fetc\u002Fmono\u002Fassemblies\u002Fmscorlib\u002Fmscorlib.config'.02-04 12:47:32.677 D\u002FMono ( 1267): Assembly mscorlib",[4215,16741,16742],{},"0xb85ce5c0"," added to domain RootDomain, ref_count=1",[19,16745,16746],{},"Could not connect to the debugger.",[16,16748,16749],{},"At least now, the Android emulator started and it would deploy to the device. I also could run the App on the device. So why would the debugger not attach?",[16,16751,16752],{},[1139,16753,16755],{"href":16754},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_8.png",[156,16756],{"title":158,"style":16154,"border":8404,"alt":158,"src":16757,"width":16758,"height":8464},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_3.png",376,[16,16760,16761],{},"I disabled “Fast Deploy” and retried. Well it would deploy the app but again the debugger was not attached.",[16,16763,16764],{},[1139,16765,16767],{"href":16766},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_10.png",[156,16768],{"title":158,"style":16154,"border":8404,"alt":158,"src":16769,"width":16770,"height":4377},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_4.png",373,[16,16772,16773],{},"Looking at the Hyper-V manager",[16,16775,16776],{},[1139,16777,16779],{"href":16778},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_12.png",[156,16780],{"title":158,"style":16154,"border":8404,"alt":158,"src":16781,"width":8450,"height":4487},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_5.png",[16,16783,16784],{},"Reading the reference blog indicated that I need to ‘Migrate to a physical computer with a different processor version” Reference:",[16,16786,16787,16790],{},[1139,16788],{"title":16789,"href":16789},"https:\u002F\u002Fdzone.com\u002Farticles\u002Ffix-for-could-not-connect-to-the-debugger-while-de",[1139,16791,16789],{"href":16789,"rel":16792},[3695],[16,16794,16795],{},[1139,16796,16798],{"href":16797},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_14.png",[156,16799],{"title":158,"style":16154,"border":8404,"alt":158,"src":16800,"width":16801,"height":16802},"\u002Farticles\u002Fimages\u002Fopen-live-writer-starting-emulator-for-avd-phone_x86_tool_a9fa-image_thumb_6.png",396,142,[16,16804,16805,16806,16808],{},"Retrying ",[4215,16807,8850],{}," Debug run the emulator within Visual Studio 2017, the emulator started correctly..waiting..’is the debugger going to attach?’..suspense now waiting for the build-deploy process. And as the above reference article mentioned Visual Studio was stuck in the preparing stage.",[16,16810,16811],{},"It recommended that internet connection sharing enabled, so I would need to figure out how\u002Fwhere to disable\u002Fenable ‘Internet Sharing’ Using “services.msc” I found ‘Internet Connection Sharing” mine was set to Manual (Trigger Start) –which should be ok? Oddly, I was stuck here and had no idea why it was stuck in the deploy phase. After another hour I enabled by WIFI on my pc. I had it disabled to ensure I was connected via hard-wire.",[16,16813,16814],{},"Well once I enabled WIFI, then closed the emulators and restarted it all started working, and I could step through my Xamarin Forms app once again with Visual Studio 2017.",[4682,16816,16377],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":16818},[],"2017-02-04T06:37:38.8900000-05:00","Starting Android Emulator with AVD",{},"\u002Farticles\u002Fstarting-emulator-for-avd-phone-x86-toolsforapachecordova",{"title":16603,"description":16820},"articles\u002Fstarting-emulator-for-avd-phone-x86-toolsforapachecordova",[9200],"-TAnMuDFqTG96UmSEUfTvEzvYi2HrDmTKpNmnIK5nFs",{"id":16828,"title":16829,"author":8,"body":16830,"createdAt":16856,"description":1915,"extension":1101,"img":16853,"meta":16857,"navigation":1104,"path":16858,"seo":16859,"stem":16860,"tags":16861,"updatedAt":16856,"__hash__":16862},"articles\u002Farticles\u002Fbuild-action-embeddedresource.md","Build action 'EmbeddedResource'",{"type":10,"value":16831,"toc":16854},[16832,16835,16838,16841],[16,16833,16834],{},"If you have seen the following the following build errors within Xamarin Forms application…",[16,16836,16837],{},"“Build action 'EmbeddedResource' is not supported by one or more of the project's targets.”",[16,16839,16840],{},"The resolution is to open the properties on the xaml file, change the build action to something else other than Embedded Resource then change it back. ",[16,16842,16843,16844,14501,16846,16848],{},"The build error goes away and everything is good.  The error however does not stop building\u002Frunning the solution however it can be avoided to.",[1118,16845],{},[1118,16847],{},[1139,16849,16851],{"href":16850},"\u002Farticles\u002Fimages\u002Fopen-live-writer-build-action-embeddedresource_8fb4-xam_2.png",[156,16852],{"style":15953,"src":16853,"border":8404,"alt":16520,"title":16520,"width":16522,"height":16523},"\u002Farticles\u002Fimages\u002Fopen-live-writer-build-action-embeddedresource_8fb4-xam_thumb.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":16855},[],"2017-02-03T03:16:12.9500000-05:00",{},"\u002Farticles\u002Fbuild-action-embeddedresource",{"title":16829,"description":1915},"articles\u002Fbuild-action-embeddedresource",[9200],"wt8tNrcjYv7LyIwiCgmGm9SubVJWPaRsHMKv_TYDmjU",{"id":16864,"title":16865,"author":8,"body":16866,"createdAt":16894,"description":1915,"extension":1101,"img":16876,"meta":16895,"navigation":1104,"path":16896,"seo":16897,"stem":16898,"tags":16899,"updatedAt":16894,"__hash__":16900},"articles\u002Farticles\u002Fvisual-studio-emulator-for-android.md","Visual Studio Emulator for Android",{"type":10,"value":16867,"toc":16892},[16868,16871,16878],[16,16869,16870],{},"“The Emulator is unable to connect to the device operating system”",[1139,16872,16874],{"href":16873},"\u002Farticles\u002Fimages\u002Fopen-live-writer-visual-studio-emulator-for-android_e589-image_2.png",[156,16875],{"style":15953,"src":16876,"border":8404,"alt":158,"title":158,"width":8450,"height":16877},"\u002Farticles\u002Fimages\u002Fopen-live-writer-visual-studio-emulator-for-android_e589-image_thumb.png",157,[16,16879,16880,16881,14501,16883,16885],{},"The resolution was to ensure the Network Connection – Adapter “vEthernet (Internal Ethernet Port Windows Phone Emulator Internal Switch)” was enabled.",[1118,16882],{},[1118,16884],{},[1139,16886,16888],{"href":16887},"\u002Farticles\u002Fimages\u002Fopen-live-writer-visual-studio-emulator-for-android_e589-image_6.png",[156,16889],{"style":15953,"src":16890,"border":8404,"alt":158,"title":158,"width":16891,"height":4510},"\u002Farticles\u002Fimages\u002Fopen-live-writer-visual-studio-emulator-for-android_e589-image_thumb_2.png",379,{"title":1080,"searchDepth":1081,"depth":1081,"links":16893},[],"2017-01-27T09:23:01.2100000-05:00",{},"\u002Farticles\u002Fvisual-studio-emulator-for-android",{"title":16865,"description":1915},"articles\u002Fvisual-studio-emulator-for-android",[9200],"LB6Mk4yGa0Ok9lrQNHDt5QnMwYy2Z0eiAeaCriVxOAM",{"id":16902,"title":16903,"author":8,"body":16904,"createdAt":16959,"description":16960,"extension":1101,"img":16953,"meta":16961,"navigation":1104,"path":16962,"seo":16963,"stem":16964,"tags":16965,"updatedAt":16959,"__hash__":16967},"articles\u002Farticles\u002Fentity-framework-and-primary-keys.md","Entity Framework and Primary Keys",{"type":10,"value":16905,"toc":16957},[16906,16909,16915,16940,16943,16955],[16,16907,16908],{},"Entity Framework relies on primary keys with views and tables.  If you are trying to bring a view into dbContext, and the view does not have a primary key the following should help you out.  The schema object has to have primary key defined and it be set to not allow nulls (not-null).",[16,16910,16911,16912,16914],{},"The solution for me was to refashion my view definition using RowId like the following",[1118,16913],{},"\nThis will create a non-null RowId for each row in the result.",[2232,16916,16918],{"className":7871,"code":16917,"language":7873,"meta":1080,"style":1080},"SELECT ISNULL(ROW_NUMBER() OVER(ORDER BY P1), -1) \nAS RowID, P1 AS Code, P3, P2\nFROM dbo.BigTable \nWHERE P1 IS NOT NULL\n",[2239,16919,16920,16925,16930,16935],{"__ignoreMap":1080},[4215,16921,16922],{"class":4217,"line":4218},[4215,16923,16924],{},"SELECT ISNULL(ROW_NUMBER() OVER(ORDER BY P1), -1) \n",[4215,16926,16927],{"class":4217,"line":1081},[4215,16928,16929],{},"AS RowID, P1 AS Code, P3, P2\n",[4215,16931,16932],{"class":4217,"line":1084},[4215,16933,16934],{},"FROM dbo.BigTable \n",[4215,16936,16937],{"class":4217,"line":4234},[4215,16938,16939],{},"WHERE P1 IS NOT NULL\n",[16,16941,16942],{},"After you create the view take a look at the view definition within SQL Server Management Studio.  You should see that you have defined a column RowId which is non-null. ",[16,16944,16945,16946,16948],{},"This will satisfy Entity Framework and dbContext can now include a reference to these views or tables.",[1118,16947],{},[1139,16949,16951],{"style":15880,"href":16950},"\u002Farticles\u002Fimages\u002Fopen-live-writer-entity-framework-and-primary-keys_eb29-ef_2.png",[156,16952],{"style":15953,"src":16953,"border":8404,"alt":16954,"title":16954,"width":8450,"height":13532},"\u002Farticles\u002Fimages\u002Fopen-live-writer-entity-framework-and-primary-keys_eb29-ef_thumb.png","ef",[4682,16956,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":16958},[],"2017-01-18T09:49:20.3800000-05:00","Entity Framework relies on primary keys with views and tables...",{},"\u002Farticles\u002Fentity-framework-and-primary-keys",{"title":16903,"description":16960},"articles\u002Fentity-framework-and-primary-keys",[16966],"entityframework","LlkG54x3JZij2W3gLKsdJshQfKO6dv1t6tzMvSrv9wQ",{"id":16969,"title":16970,"author":8,"body":16971,"createdAt":17038,"description":1915,"extension":1101,"img":16980,"meta":17039,"navigation":1104,"path":17040,"seo":17041,"stem":17042,"tags":17043,"updatedAt":17038,"__hash__":17044},"articles\u002Farticles\u002Fxamarin-mac-agent-unable-to-connect.md","Xamarin Mac Agent–Unable to connect",{"type":10,"value":16972,"toc":17036},[16973,16987,16994,17009,17020,17030,17033],[16,16974,16975,16982,14501,16984,16986],{},[1139,16976,16978],{"style":15880,"href":16977},"\u002Farticles\u002Fimages\u002Fopen-live-writer-0ed91d2b3197_8765-image_2.png",[156,16979],{"style":8402,"src":16980,"border":8404,"alt":158,"title":158,"width":16981,"height":16802},"\u002Farticles\u002Fimages\u002Fopen-live-writer-0ed91d2b3197_8765-image_thumb.png",155,[1118,16983],{},[1118,16985],{},"\nI was unable to connect to Mac today.  Not sure why. ",[16,16988,16989,16990,16993],{},"I found this documentation from Xamarin ",[1139,16991,8578],{"href":16992,"target":1142},"https:\u002F\u002Fdeveloper.xamarin.com\u002Fguides\u002Fios\u002Fgetting_started\u002Finstallation\u002Fwindows\u002Fconnecting-to-mac\u002F",". ",[16,16995,16996,16997,17000,17001,17003,17004,14501,17006,17008],{},"The document ",[1139,16998,8578],{"href":16999,"target":1142},"https:\u002F\u002Fdeveloper.xamarin.com\u002Fguides\u002Fios\u002Fgetting_started\u002Finstallation\u002Fwindows\u002Fconnecting-to-mac\u002Ftroubleshooting\u002F"," gave me the solution.",[1118,17002],{},"\nOnce I did the following I was able to use the Xamarin Mac Agent (Visual Studio – Tools – iOS – Xamarin Mac Agent) to connect.",[1118,17005],{},[1118,17007],{},"\nNext, test if the ssh client from OpenSSH can connect successfully to the Mac from Windows. One way to install this program is to install",[16,17010,17011,17015,17016,17019],{},[1139,17012,17014],{"href":17013},"https:\u002F\u002Fgit-for-windows.github.io\u002F","Git for Windows",". You can then start a ",[19,17017,17018],{},"Git Bash"," command prompt and attempt to ssh in to the Mac with your username and IP address",[16,17021,17022],{},[1139,17023,17025],{"href":17024},"\u002Farticles\u002Fimages\u002Fopen-live-writer-0ed91d2b3197_8765-image_4.png",[156,17026],{"style":8402,"src":17027,"border":8404,"alt":158,"title":158,"width":17028,"height":17029},"\u002Farticles\u002Fimages\u002Fopen-live-writer-0ed91d2b3197_8765-image_thumb_1.png",559,65,[16,17031,17032],{},"Once this was permanently added the Max Agent successfully connected. ",[16,17034,17035],{},"By the way I found SSH – I had Git for Windows installed, by opening GIT Shell.",{"title":1080,"searchDepth":1081,"depth":1081,"links":17037},[],"2017-01-18T02:46:11.6900000-05:00",{},"\u002Farticles\u002Fxamarin-mac-agent-unable-to-connect",{"title":16970,"description":1915},"articles\u002Fxamarin-mac-agent-unable-to-connect",[9200],"NW9Sc0uSvm7zSo9Iy-Pw8OzJPVXNMr37ucc_BNMcgng",{"id":17046,"title":17047,"author":8,"body":17048,"createdAt":17100,"description":17101,"extension":1101,"img":17095,"meta":17102,"navigation":1104,"path":17103,"seo":17104,"stem":17105,"tags":17106,"updatedAt":17100,"__hash__":17107},"articles\u002Farticles\u002Ffind-all-tables-containing-column-with-specified-name.md","Find all tables containing column with specified name",{"type":10,"value":17049,"toc":17098},[17050,17053,17088,17096],[16,17051,17052],{},"In order to find a column name anywhere it is used in a table or view I was able to use the\nfollowing SQL…",[2232,17054,17056],{"className":7871,"code":17055,"language":7873,"meta":1080,"style":1080},"SELECT      COLUMN_NAME AS 'ColumnName'  \n            ,TABLE_NAME AS  'TableName'  \nFROM        INFORMATION_SCHEMA.COLUMNS  \nWHERE       COLUMN_NAME LIKE '%columnnameyouarelookingfor%'  \nORDER BY    TableName  \n            ,ColumnName;  \n",[2239,17057,17058,17063,17068,17073,17078,17083],{"__ignoreMap":1080},[4215,17059,17060],{"class":4217,"line":4218},[4215,17061,17062],{},"SELECT      COLUMN_NAME AS 'ColumnName'  \n",[4215,17064,17065],{"class":4217,"line":1081},[4215,17066,17067],{},"            ,TABLE_NAME AS  'TableName'  \n",[4215,17069,17070],{"class":4217,"line":1084},[4215,17071,17072],{},"FROM        INFORMATION_SCHEMA.COLUMNS  \n",[4215,17074,17075],{"class":4217,"line":4234},[4215,17076,17077],{},"WHERE       COLUMN_NAME LIKE '%columnnameyouarelookingfor%'  \n",[4215,17079,17080],{"class":4217,"line":4240},[4215,17081,17082],{},"ORDER BY    TableName  \n",[4215,17084,17085],{"class":4217,"line":4246},[4215,17086,17087],{},"            ,ColumnName;\n",[1139,17089,17092],{"style":17090,"href":17091},"display:none","\u002Farticles\u002Fimages\u002Fopen-live-writer-f5f906eb5cd0_bcd7-sql_2.png",[156,17093],{"title":7873,"style":17094,"border":8404,"alt":7873,"src":17095,"width":8450,"height":8450},"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px;display='none';","\u002Farticles\u002Fimages\u002Fopen-live-writer-f5f906eb5cd0_bcd7-sql_thumb.png",[4682,17097,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":17099},[],"2017-01-14T06:29:42.0000000-05:00","Find a column name anywhere.",{},"\u002Farticles\u002Ffind-all-tables-containing-column-with-specified-name",{"title":17047,"description":17101},"articles\u002Ffind-all-tables-containing-column-with-specified-name",[7873],"D4x_b6dLDTOhJk_oDi11rJkwS-ARV4n6opJh-YLJXvE",{"id":17109,"title":17110,"author":8,"body":17111,"createdAt":17380,"description":1915,"extension":1101,"img":17374,"meta":17381,"navigation":1104,"path":17382,"seo":17383,"stem":17384,"tags":17385,"updatedAt":17380,"__hash__":17386},"articles\u002Farticles\u002Fc-6-0-new-features.md","C# 6.0 New Features",{"type":10,"value":17112,"toc":17378},[17113,17116,17122,17137,17152,17163,17211,17216,17225,17228,17243,17257,17282,17288,17297,17300,17315,17321,17331,17336,17365,17376],[16,17114,17115],{},"The following features require the C# 6.0 compiler which is included in Visual Studio 2015.  Remarkably however C# 6 new features does not require and updated version of Microsoft .NET Framework (i.e. as long as you compile with VS.NET 2015 the features still work against .NET Framework 4).  This is possible as the features are implemented in the compiler itself and do not have dependencies on the .NET Framework.",[16,17117,17118,17119,17121],{},"1.) Using Static",[1118,17120],{},"\nUsing static directives for System.ConsoleColor looks like (as well as System.IO.Directory)",[2232,17123,17125],{"className":8721,"code":17124,"language":8723,"meta":1080,"style":1080},"using static System.ConsoleColor;  \nusing static System.IO.Directory;  \n",[2239,17126,17127,17132],{"__ignoreMap":1080},[4215,17128,17129],{"class":4217,"line":4218},[4215,17130,17131],{},"using static System.ConsoleColor;  \n",[4215,17133,17134],{"class":4217,"line":1081},[4215,17135,17136],{},"using static System.IO.Directory;\n",[2232,17138,17140],{"className":8721,"code":17139,"language":8723,"meta":1080,"style":1080},"ForegroundColor = Yellow;  \nstring[] files = GetFiles(directoryPath, searchPattern, System.IO.SearchOption.AllDirectories);  \n",[2239,17141,17142,17147],{"__ignoreMap":1080},[4215,17143,17144],{"class":4217,"line":4218},[4215,17145,17146],{},"ForegroundColor = Yellow;  \n",[4215,17148,17149],{"class":4217,"line":1081},[4215,17150,17151],{},"string[] files = GetFiles(directoryPath, searchPattern, System.IO.SearchOption.AllDirectories);\n",[16,17153,17154,17155,14501,17157,17159,17160,17162],{},"These enable the invocation of numerous methods, properties and enums directly.  In each case, this eliminates the need to qualify the static member with its type.",[1118,17156],{},[1118,17158],{},"\n2.) The nameof operator",[1118,17161],{},"\nThis is a new contextual keyword to identify a string literal that extracts a constant for (at compile time) the unqualified name of whatever identifier is specified as an argument.  The nameof(filename) returns “filename,” the name of the Encrypt method’s parameter.  However, nameof works with any programmatic identifier.  By leveraging the nameof operator, it’s possible to eliminate the vast majority of “magic” strings that refer to code identifiers as long as they’re in scope. This not only eliminates runtime errors due to misspellings within the magic strings, which are never verified by the complier, but also enables refactoring tools like Rename to update all references to the name change identifier.",[2232,17164,17166],{"className":8721,"code":17165,"language":8723,"meta":1080,"style":1080},"private static void Encrypt(string filename)  \n  {  \n    if (!Exists(filename)) \u002F\u002F LOGIC ERROR: Using Directory rather than File  \n    {  \n      throw new ArgumentException(\"The file does not exist.\",   \n        nameof(filename));  \n    }  \n    \u002F\u002F ...  \n  }\n",[2239,17167,17168,17173,17178,17183,17187,17192,17197,17201,17206],{"__ignoreMap":1080},[4215,17169,17170],{"class":4217,"line":4218},[4215,17171,17172],{},"private static void Encrypt(string filename)  \n",[4215,17174,17175],{"class":4217,"line":1081},[4215,17176,17177],{},"  {  \n",[4215,17179,17180],{"class":4217,"line":1084},[4215,17181,17182],{},"    if (!Exists(filename)) \u002F\u002F LOGIC ERROR: Using Directory rather than File  \n",[4215,17184,17185],{"class":4217,"line":4234},[4215,17186,10259],{},[4215,17188,17189],{"class":4217,"line":4240},[4215,17190,17191],{},"      throw new ArgumentException(\"The file does not exist.\",   \n",[4215,17193,17194],{"class":4217,"line":4246},[4215,17195,17196],{},"        nameof(filename));  \n",[4215,17198,17199],{"class":4217,"line":4252},[4215,17200,11671],{},[4215,17202,17203],{"class":4217,"line":4258},[4215,17204,17205],{},"    \u002F\u002F ...  \n",[4215,17207,17208],{"class":4217,"line":4264},[4215,17209,17210],{},"  }\n",[16,17212,8422,17213,17215],{},[1118,17214],{},"\n3.) String Interpolation – this is an easier one to grasp.  This is the before syntax…",[2232,17217,17219],{"className":8721,"code":17218,"language":8723,"meta":1080,"style":1080},"string.Format(\"Hello!  My name is {0} {1} and I am {2} years old.\", person.FirstName, person.LastName, person.Age);\n",[2239,17220,17221],{"__ignoreMap":1080},[4215,17222,17223],{"class":4217,"line":4218},[4215,17224,17218],{},[16,17226,17227],{},"after…",[2232,17229,17231],{"className":8721,"code":17230,"language":8723,"meta":1080,"style":1080},"$\"Hello!  My name is {person.FirstName} {person.LastName} \n            and I am {person.Age} years old.\";\n",[2239,17232,17233,17238],{"__ignoreMap":1080},[4215,17234,17235],{"class":4217,"line":4218},[4215,17236,17237],{},"$\"Hello!  My name is {person.FirstName} {person.LastName} \n",[4215,17239,17240],{"class":4217,"line":1081},[4215,17241,17242],{},"            and I am {person.Age} years old.\";\n",[16,17244,17245,17246,14501,17248,17250,17251,17253,17254,17256],{},"The string interpolation syntax reduces errors caused by arguments following the format string that are in improper order, or missing altogether and causing an exception.",[1118,17247],{},[1118,17249],{},"\n4.) Null-Conditional Operator",[1118,17252],{},"\nC# 6.0 introduces the “?.” operator known as the null-conditional operator.  The null-conditional operator translates to checking whether the operand is null prior to invoking the method or property.  What makes the null-conditional operator especially convenient is that it can be chained. If, for example, you invoke string",[4215,17255],{}," names = person?.Name?.Split(' '), Split will only be invoked if both person and person.Name are not null. When chained, if the first operand is null, the expression evaluation is short-circuited, and no further invocation within the expression call chain will occur.",[2232,17258,17260],{"className":8721,"code":17259,"language":8723,"meta":1080,"style":1080},"\u002F\u002Fafter  \nswitch (args?.Length) {}  \n\u002F\u002Fbefore  \n(args != null) ? (int?)args.Length : null  \n",[2239,17261,17262,17267,17272,17277],{"__ignoreMap":1080},[4215,17263,17264],{"class":4217,"line":4218},[4215,17265,17266],{},"\u002F\u002Fafter  \n",[4215,17268,17269],{"class":4217,"line":1081},[4215,17270,17271],{},"switch (args?.Length) {}  \n",[4215,17273,17274],{"class":4217,"line":1084},[4215,17275,17276],{},"\u002F\u002Fbefore  \n",[4215,17278,17279],{"class":4217,"line":4234},[4215,17280,17281],{},"(args != null) ? (int?)args.Length : null\n",[16,17283,17284,17285,17287],{},"5.) Auto-Property Improvements",[1118,17286],{},"\nGetter-only auto-properties are a C# 6.0 feature for declaring read-only properties that are backed (internally) by a read-only field. As such, these properties can only be modified from within the constructor.  Rather than the six or so lines needed to declare a read-only property and initialize it prior to C# 6.0, now a single-line declaration and the assignment from within the constructor are all that’s needed.",[2232,17289,17291],{"className":8721,"code":17290,"language":8723,"meta":1080,"style":1080},"public ConsoleColor ForegroundColorVerbose { get; }\n",[2239,17292,17293],{"__ignoreMap":1080},[4215,17294,17295],{"class":4217,"line":4218},[4215,17296,17290],{},[16,17298,17299],{},"A second auto-property feature introduced in C# 6.0 is support for initializers.",[2232,17301,17303],{"className":8721,"code":17302,"language":8723,"meta":1080,"style":1080},"static private Lazy\u003CConsoleConfiguration>\nDefaultConfig{ get; } = new Lazy\u003CConsoleConfiguration>(() => new ConsoleConfiguration());\n",[2239,17304,17305,17310],{"__ignoreMap":1080},[4215,17306,17307],{"class":4217,"line":4218},[4215,17308,17309],{},"static private Lazy\u003CConsoleConfiguration>\n",[4215,17311,17312],{"class":4217,"line":1081},[4215,17313,17314],{},"DefaultConfig{ get; } = new Lazy\u003CConsoleConfiguration>(() => new ConsoleConfiguration());\n",[16,17316,17317,17318,17320],{},"6.) Expression Bodied Methods and Auto-Properties",[1118,17319],{},"\nThis feature exists for both properties and methods and allows the use of the arrow operator (=>) to assign an expression to either a property or method in place of a statement body.",[2232,17322,17324],{"className":8721,"code":17323,"language":8723,"meta":1080,"style":1080},"static public ConsoleConfiguration GetDefault() => DefaultConfig.Value;  \n",[2239,17325,17326],{"__ignoreMap":1080},[4215,17327,17328],{"class":4217,"line":4218},[4215,17329,17330],{},"static public ConsoleConfiguration GetDefault() => DefaultConfig.Value;\n",[16,17332,8422,17333,17335],{},[1118,17334],{},"\n6.) Exception Improvements – ability to use a when clause to do additional filtering when an exception is thrown",[2232,17337,17339],{"className":8721,"code":17338,"language":8723,"meta":1080,"style":1080},"try { \n        \u002F\u002F Do stuff\n    } catch (Exception e) when ((DateTime.Now.DayOfWeek == DayOfWeek.Saturday) {\n        \u002F\u002F Swallow \n    }\n",[2239,17340,17341,17346,17351,17356,17361],{"__ignoreMap":1080},[4215,17342,17343],{"class":4217,"line":4218},[4215,17344,17345],{},"try { \n",[4215,17347,17348],{"class":4217,"line":1081},[4215,17349,17350],{},"        \u002F\u002F Do stuff\n",[4215,17352,17353],{"class":4217,"line":1084},[4215,17354,17355],{},"    } catch (Exception e) when ((DateTime.Now.DayOfWeek == DayOfWeek.Saturday) {\n",[4215,17357,17358],{"class":4217,"line":4234},[4215,17359,17360],{},"        \u002F\u002F Swallow \n",[4215,17362,17363],{"class":4217,"line":4240},[4215,17364,7437],{},[16,17366,8422,17367,17369],{},[1118,17368],{},[1139,17370,17372],{"href":17371},"\u002Farticles\u002Fimages\u002Fopen-live-writer-c-60-new-features_12307-c6_2.jpg",[156,17373],{"style":15953,"src":17374,"border":8404,"alt":17375,"title":17375,"width":8450,"height":16006},"\u002Farticles\u002Fimages\u002Fopen-live-writer-c-60-new-features_12307-c6_thumb.jpg","c6",[4682,17377,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":17379},[],"2016-11-09T14:21:45.8700000-05:00",{},"\u002Farticles\u002Fc-6-0-new-features",{"title":17110,"description":1915},"articles\u002Fc-6-0-new-features",[8723],"uMgZQ3TZwQfUVBOXbej-F7xUUHGEeZcIbN5MlW-pDw4",{"id":17388,"title":17389,"author":8,"body":17390,"createdAt":17555,"description":17556,"extension":1101,"img":17405,"meta":17557,"navigation":1104,"path":17558,"seo":17559,"stem":17560,"tags":17561,"updatedAt":17555,"__hash__":17562},"articles\u002Farticles\u002Fxamarin-player-failed-to-initialize-device-nexus4.md","Xamarin Player Failed to initialize device Nexus4",{"type":10,"value":17391,"toc":17553},[17392,17395,17398,17407,17413,17428,17432,17435,17450,17453,17474,17477,17485,17496,17499,17508,17511,17522,17534,17542,17545],[16,17393,17394],{},"What’s going on?  I want to run my Android emulator (XAP – Xamarin Android Player) and I get the following issue.",[16,17396,17397],{},"“Failed to initialize device”, “VboxMessage command failed: See log for further details”",[16,17399,17400],{},[1139,17401,17403],{"href":17402},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_2.png",[156,17404],{"style":15953,"src":17405,"border":8404,"alt":158,"title":158,"width":8450,"height":17406},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb.png",133,[16,17408,17409,17410],{},"Ok, what’s going on today with my Xamarin Player.  A bit of Google-ing came up with the following information announced at the 2016 Evolve conference. \u003C\n",[19,17411,17412],{},"New Mac OS X Universal Installer",[16,17414,17415,17416,17419,17420,17423,17424,17427],{},"To streamline development setup on Mac OS X, we have introduced a brand ",[19,17417,17418],{},"new universal installer",". This will not only handle updating to the latest version of Xamarin, but also will ",[19,17421,17422],{},"setup the new and improved Android Emulators from Google",", based on x86 HAXM, that are now ",[19,17425,17426],{},"10 times faster then before!"," If you are on Windows using Visual Studio be sure to checkout the Hyper-V enabled",[1139,17429,17431],{"href":17430},"https:\u002F\u002Fwww.visualstudio.com\u002Fen-us\u002Ffeatures\u002Fmsft-android-emulator-vs.aspx","\nVisual Studio Emulators for Android",[19,17433,17434],{},"Xamarin Android Player is now officially deprecated",[16,17436,17437,17438,17441,17442,17444,17445],{},"Wow - ",[19,17439,17440],{},"Xamarin Android Player is now officially deprecated – ","This honestly was a surprise as it had worked so well for me in the past.",[1118,17443],{},"\nSo as instructed checking out the Hyper-V enabled ",[1139,17446,17447],{"href":17430,"target":1142},[19,17448,17449],{},"Visual Studio Emulators for Android",[16,17451,17452],{},"I downloaded, installed the emulator promising “The x86 emulator boots and runs at nearly the speed of a physical device, making debugging a breeze on graphics-intensive, processor-hungry apps.”",[16,17454,8422,17455,17461,17463,17464,14501,17466,17468],{},[1139,17456,17458],{"href":17457},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image7.png",[156,17459],{"style":15953,"src":17460,"border":8404,"alt":158,"title":158,"width":16189,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image7_thumb.png",[1118,17462],{},"\n \n \nAfter the installation, I was required to restart.  I opened my Android-Xamarin app thinking I would find this emulator choice in the Visual Studio Device drop down.  Nope.  I found ‘Visual Studio Emulator for Android’ as a recently installed application.  I soon made that attached to my task bar for ease of finding next time.  Starting it, I was challenged with the next hurdle. “You do not have permission to modify internal Hyper-V network adapter settings, which are required to run the emulator” – I hit ‘Retry’ and it appears to be running with the",[1118,17465],{},[1118,17467],{},[1139,17469,17471],{"href":17470},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_4.png",[156,17472],{"style":15953,"src":17473,"border":8404,"alt":158,"title":158,"width":8450,"height":16802},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_1.png",[16,17475,17476],{},"I hit ‘Retry’ and it appears to be running with the following notification.  Still preparing, I am starting to wonder if anything is going on. ",[16,17478,17479],{},[1139,17480,17482],{"href":17481},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_8.png",[156,17483],{"style":15953,"src":17484,"border":8404,"alt":158,"title":158,"width":8450,"height":4429},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_3.png",[16,17486,17487,17488,17490],{},"Bang – I am starting to see something with “OS – Starting” and I now see the emulator.  Whew.",[1118,17489],{},[1139,17491,17493],{"href":17492},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_10.png",[156,17494],{"style":15953,"src":17495,"border":8404,"alt":158,"title":158,"width":8449,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_4.png",[16,17497,17498],{},"Checking things out, clicking around I try the web browser, and given another test of my competence.  So the problem is, I cannot browse to the internet via the Android Emulator default browser.",[16,17500,17501],{},[1139,17502,17504],{"href":17503},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_12.png",[156,17505],{"style":15953,"src":17506,"border":8404,"alt":158,"title":158,"width":8450,"height":17507},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_5.png",89,[16,17509,17510],{},"I uninstalled Xamarin Android Player – figuring I didn’t need this any more ..moment of silence please.",[16,17512,17513,17514,17516],{},"Ok, so using a few of my Sherlock skills I opened up Hyper-V Manager (found via start search).  Select the emulator then the settings option for that emulator.",[1118,17515],{},[1139,17517,17519],{"href":17518},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_14.png",[156,17520],{"style":15953,"src":17521,"border":8404,"alt":158,"title":158,"width":8450,"height":12585},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_6.png",[16,17523,17524,17525,17527],{},"I then selected the ‘Emulator External Network Adaptor” and chose my physical network adapter, closed\u002Fshutdown the emulator and restarted.  Great- challenge completed and all seems to be working.",[1118,17526],{},[1139,17528,17530],{"href":17529},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_16.png",[156,17531],{"style":15953,"src":17532,"border":8404,"alt":158,"title":158,"width":8450,"height":17533},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_7.png",225,[16,17535,17536],{},[1139,17537,17539],{"href":17538},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_18.png",[156,17540],{"style":15953,"src":17541,"border":8404,"alt":158,"title":158,"width":13295,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_8.png",[16,17543,17544],{},"Circling back to my Visual Studio – I am not able to use the Visual Studio Android emulator by selecting the appropriate device.  I have successfully removed the Xamarin Android Player, installed the new\u002Fimproved Visual Studio Emulator and made modifications via Hyper-V Manager to set the network connection of the device to my local hardware on my pc.",[16,17546,17547],{},[1139,17548,17550],{"href":17549},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_20.png",[156,17551],{"style":15953,"src":17552,"border":8404,"alt":158,"title":158,"width":8450,"height":4435},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-player-failed-to-initialize-devi_ae14-image_thumb_9.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":17554},[],"2016-06-12T06:39:07.8500000-04:00","Failed to initialize...",{},"\u002Farticles\u002Fxamarin-player-failed-to-initialize-device-nexus4",{"title":17389,"description":17556},"articles\u002Fxamarin-player-failed-to-initialize-device-nexus4",[9200],"-lzYhCSoLfeLoNk6Ny6UBEB46Y35mtv4t2kMDAnjhGE",{"id":17564,"title":17565,"author":8,"body":17566,"createdAt":18083,"description":17570,"extension":1101,"img":18077,"meta":18084,"navigation":1104,"path":18085,"seo":18086,"stem":18087,"tags":18088,"updatedAt":18083,"__hash__":18089},"articles\u002Farticles\u002Fxamarin-android-fragments-and-orientations-rotation.md","Xamarin Android - Fragments and Orientations\u002FRotation",{"type":10,"value":17567,"toc":18081},[17568,17571,17574,17577,17586,17589,17617,17620,17725,17728,17784,17787,18057,18079],[16,17569,17570],{},"When you rotate\u002Fchange the orientation of your Android application the Activity will be destroyed and recreated.  What this means is that any variables, fragments will be destroyed when the user changes the orientation of their device (say going from portrait to landscape).  Your users will hate you.  For example, If they are filling out a form and by accident the orientation changes all fields entered will be lost.",[16,17572,17573],{},"How can we avoid this bad experience? There are a few ways.",[16,17575,17576],{},"Within the OnCreate of the Activity you can force the orientation to one or the other.  A user can rotate the device however the user interface does not change orientation.",[2232,17578,17580],{"className":8721,"code":17579,"language":8723,"meta":1080,"style":1080},"RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait;\n",[2239,17581,17582],{"__ignoreMap":1080},[4215,17583,17584],{"class":4217,"line":4218},[4215,17585,17579],{},[16,17587,17588],{},"Using an attribute on the class will lock the orientation.  The following ignores the orientation and the screen size changes.  This is easy however the difficulty is that your application will not be responsive to size\u002Forientation changes.  Your application will respond to different screen sizes or orientation.  This too can be less than optimum.",[2232,17590,17592],{"className":8721,"code":17591,"language":8723,"meta":1080,"style":1080},"[Activity(Label = \"AppDave\", MainLauncher = true, Icon = \"@drawable\u002Ficon\", \nTheme = \"@style\u002FMyTheme\", ConfigurationChanges = Android.Content.PM.ConfigChanges.ScreenSize | Android.Content.PM.ConfigChanges.Orientation)]  \npublic class MainActivity : AppCompatActivity  \n{  \n}\n",[2239,17593,17594,17599,17604,17609,17613],{"__ignoreMap":1080},[4215,17595,17596],{"class":4217,"line":4218},[4215,17597,17598],{},"[Activity(Label = \"AppDave\", MainLauncher = true, Icon = \"@drawable\u002Ficon\", \n",[4215,17600,17601],{"class":4217,"line":1081},[4215,17602,17603],{},"Theme = \"@style\u002FMyTheme\", ConfigurationChanges = Android.Content.PM.ConfigChanges.ScreenSize | Android.Content.PM.ConfigChanges.Orientation)]  \n",[4215,17605,17606],{"class":4217,"line":1084},[4215,17607,17608],{},"public class MainActivity : AppCompatActivity  \n",[4215,17610,17611],{"class":4217,"line":4234},[4215,17612,10244],{},[4215,17614,17615],{"class":4217,"line":4240},[4215,17616,9887],{},[16,17618,17619],{},"In the following example I have an application with three fragments.   The first fragment with tag “Fragment1” gets set when the application loads.  I will use this tag as the test to see if the activity has started at least one time.  Within the OnCreate method I check to see if the Activity has run by checking SupportFragmentManager.FindFragmentByTag(“Fragment1”).",[2232,17621,17623],{"className":8721,"code":17622,"language":8723,"meta":1080,"style":1080},"if (SupportFragmentManager.FindFragmentByTag(\"Fragment1\") != null)  \n{  \n    if (SupportFragmentManager.FindFragmentByTag(\"Fragment1\") != null)  \n        _fragment1 = SupportFragmentManager.FindFragmentByTag(\"Fragment1\") as Fragment1;  \n  \n    if (SupportFragmentManager.FindFragmentByTag(\"Fragment2\") != null)  \n        _fragment2 = SupportFragmentManager.FindFragmentByTag(\"Fragment2\") as Fragment2;  \n  \n    if (SupportFragmentManager.FindFragmentByTag(\"Fragment3\") != null)  \n        _fragment3 = SupportFragmentManager.FindFragmentByTag(\"Fragment3\") as Fragment3;  \n}  \nelse  \n{  \n    \u002F\u002Fno fragments in the container  \n    _fragment1 = new Fragment1();  \n      \n    var trans = SupportFragmentManager.BeginTransaction();  \n    trans.Add(Resource.Id.fragmentContainer, _fragment1, \"Fragment1\");                  \n    trans.Commit();  \n    _currentFragment = _fragment1;  \n}\n",[2239,17624,17625,17630,17634,17639,17644,17648,17653,17658,17662,17667,17672,17677,17682,17686,17691,17696,17701,17706,17711,17716,17721],{"__ignoreMap":1080},[4215,17626,17627],{"class":4217,"line":4218},[4215,17628,17629],{},"if (SupportFragmentManager.FindFragmentByTag(\"Fragment1\") != null)  \n",[4215,17631,17632],{"class":4217,"line":1081},[4215,17633,10244],{},[4215,17635,17636],{"class":4217,"line":1084},[4215,17637,17638],{},"    if (SupportFragmentManager.FindFragmentByTag(\"Fragment1\") != null)  \n",[4215,17640,17641],{"class":4217,"line":4234},[4215,17642,17643],{},"        _fragment1 = SupportFragmentManager.FindFragmentByTag(\"Fragment1\") as Fragment1;  \n",[4215,17645,17646],{"class":4217,"line":4240},[4215,17647,10274],{},[4215,17649,17650],{"class":4217,"line":4246},[4215,17651,17652],{},"    if (SupportFragmentManager.FindFragmentByTag(\"Fragment2\") != null)  \n",[4215,17654,17655],{"class":4217,"line":4252},[4215,17656,17657],{},"        _fragment2 = SupportFragmentManager.FindFragmentByTag(\"Fragment2\") as Fragment2;  \n",[4215,17659,17660],{"class":4217,"line":4258},[4215,17661,10274],{},[4215,17663,17664],{"class":4217,"line":4264},[4215,17665,17666],{},"    if (SupportFragmentManager.FindFragmentByTag(\"Fragment3\") != null)  \n",[4215,17668,17669],{"class":4217,"line":4270},[4215,17670,17671],{},"        _fragment3 = SupportFragmentManager.FindFragmentByTag(\"Fragment3\") as Fragment3;  \n",[4215,17673,17674],{"class":4217,"line":4276},[4215,17675,17676],{},"}  \n",[4215,17678,17679],{"class":4217,"line":4282},[4215,17680,17681],{},"else  \n",[4215,17683,17684],{"class":4217,"line":4288},[4215,17685,10244],{},[4215,17687,17688],{"class":4217,"line":4294},[4215,17689,17690],{},"    \u002F\u002Fno fragments in the container  \n",[4215,17692,17693],{"class":4217,"line":4300},[4215,17694,17695],{},"    _fragment1 = new Fragment1();  \n",[4215,17697,17698],{"class":4217,"line":4306},[4215,17699,17700],{},"      \n",[4215,17702,17703],{"class":4217,"line":4312},[4215,17704,17705],{},"    var trans = SupportFragmentManager.BeginTransaction();  \n",[4215,17707,17708],{"class":4217,"line":4318},[4215,17709,17710],{},"    trans.Add(Resource.Id.fragmentContainer, _fragment1, \"Fragment1\");                  \n",[4215,17712,17713],{"class":4217,"line":4324},[4215,17714,17715],{},"    trans.Commit();  \n",[4215,17717,17718],{"class":4217,"line":4330},[4215,17719,17720],{},"    _currentFragment = _fragment1;  \n",[4215,17722,17723],{"class":4217,"line":4336},[4215,17724,9887],{},[16,17726,17727],{},"I am going through this backwards but this is the method that I am using to replace the current fragment with a new one.  Notice however that I am adding it with a specified tag so that we can recover it later",[2232,17729,17731],{"className":8721,"code":17730,"language":8723,"meta":1080,"style":1080},"private void ReplaceFragment(SupportFragment fragment, string tag)  \n{  \n    if (fragment.IsVisible)  \n        return;  \n  \n    var trans = SupportFragmentManager.BeginTransaction();             \n    trans.Replace(Resource.Id.fragmentContainer, fragment, tag);  \n    trans.AddToBackStack(null);  \n    trans.Commit();  \n    _currentFragment = fragment;  \n}\n",[2239,17732,17733,17738,17742,17747,17752,17756,17761,17766,17771,17775,17780],{"__ignoreMap":1080},[4215,17734,17735],{"class":4217,"line":4218},[4215,17736,17737],{},"private void ReplaceFragment(SupportFragment fragment, string tag)  \n",[4215,17739,17740],{"class":4217,"line":1081},[4215,17741,10244],{},[4215,17743,17744],{"class":4217,"line":1084},[4215,17745,17746],{},"    if (fragment.IsVisible)  \n",[4215,17748,17749],{"class":4217,"line":4234},[4215,17750,17751],{},"        return;  \n",[4215,17753,17754],{"class":4217,"line":4240},[4215,17755,10274],{},[4215,17757,17758],{"class":4217,"line":4246},[4215,17759,17760],{},"    var trans = SupportFragmentManager.BeginTransaction();             \n",[4215,17762,17763],{"class":4217,"line":4252},[4215,17764,17765],{},"    trans.Replace(Resource.Id.fragmentContainer, fragment, tag);  \n",[4215,17767,17768],{"class":4217,"line":4258},[4215,17769,17770],{},"    trans.AddToBackStack(null);  \n",[4215,17772,17773],{"class":4217,"line":4264},[4215,17774,17715],{},[4215,17776,17777],{"class":4217,"line":4270},[4215,17778,17779],{},"    _currentFragment = fragment;  \n",[4215,17781,17782],{"class":4217,"line":4276},[4215,17783,9887],{},[16,17785,17786],{},"And finally I will show the method that responds to a menu selection which calls the ReplaceFragment method",[2232,17788,17790],{"className":8721,"code":17789,"language":8723,"meta":1080,"style":1080},"public override bool OnOptionsItemSelected(IMenuItem item)  \n{      \n    switch (item.ItemId)  \n    {                  \n        case Android.Resource.Id.Home:  \n            \u002F\u002FThe hamburger icon was clicked which means the drawer toggle will handle the event  \n            \u002F\u002Fall we need to do is ensure the right drawer is closed so the don't overlap  \n            _drawerLayout.CloseDrawer(_rightDrawer);  \n            _drawerToggle.OnOptionsItemSelected(item);  \n            return true;  \n  \n        \u002F\u002Fcase Resource.Id.action_refresh:  \n        \u002F\u002F    \u002F\u002FRefresh  \n        \u002F\u002F    return true;  \n  \n        case Resource.Id.action_fragment1:  \n            \u002F\u002FShowFragment(_fragment1);  \n  \n            if (_fragment1 == null)                      \n                _fragment1 = new Fragment1();            \n                  \n                ReplaceFragment(_fragment1, \"Fragment1\");  \n            return true;  \n        case Resource.Id.action_fragment2:  \n            \u002F\u002FShowFragment(_fragment2);  \n            if (_fragment2 == null)   \n                _fragment2 = new Fragment2();  \n                  \n            ReplaceFragment(_fragment2, \"Fragment2\");  \n            return true;  \n        case Resource.Id.action_fragment3:  \n            \u002F\u002FShowFragment(_fragment3);  \n              \n            if (_fragment3 == null)                      \n                _fragment3 = new Fragment3();  \n  \n            ReplaceFragment(_fragment3, \"Fragment3\");  \n            return true;  \n        case Resource.Id.action_help:  \n            if (_drawerLayout.IsDrawerOpen(_rightDrawer))  \n            {  \n                \u002F\u002FRight Drawer is already open, close it  \n                _drawerLayout.CloseDrawer(_rightDrawer);  \n            }  \n            else  \n            {  \n                \u002F\u002FRight Drawer is closed, open it and just in case close left drawer  \n                _drawerLayout.OpenDrawer(_rightDrawer);  \n                _drawerLayout.CloseDrawer(_leftDrawer);  \n            }  \n            return true;  \n        default:  \n            return base.OnOptionsItemSelected(item);  \n    }  \n}\n",[2239,17791,17792,17797,17802,17807,17812,17817,17822,17827,17832,17837,17842,17846,17851,17859,17864,17868,17873,17878,17882,17887,17892,17897,17902,17906,17911,17916,17921,17926,17930,17935,17939,17944,17949,17954,17959,17964,17968,17973,17977,17982,17987,17991,17996,18001,18005,18010,18014,18019,18024,18029,18033,18037,18042,18047,18052],{"__ignoreMap":1080},[4215,17793,17794],{"class":4217,"line":4218},[4215,17795,17796],{},"public override bool OnOptionsItemSelected(IMenuItem item)  \n",[4215,17798,17799],{"class":4217,"line":1081},[4215,17800,17801],{},"{      \n",[4215,17803,17804],{"class":4217,"line":1084},[4215,17805,17806],{},"    switch (item.ItemId)  \n",[4215,17808,17809],{"class":4217,"line":4234},[4215,17810,17811],{},"    {                  \n",[4215,17813,17814],{"class":4217,"line":4240},[4215,17815,17816],{},"        case Android.Resource.Id.Home:  \n",[4215,17818,17819],{"class":4217,"line":4246},[4215,17820,17821],{},"            \u002F\u002FThe hamburger icon was clicked which means the drawer toggle will handle the event  \n",[4215,17823,17824],{"class":4217,"line":4252},[4215,17825,17826],{},"            \u002F\u002Fall we need to do is ensure the right drawer is closed so the don't overlap  \n",[4215,17828,17829],{"class":4217,"line":4258},[4215,17830,17831],{},"            _drawerLayout.CloseDrawer(_rightDrawer);  \n",[4215,17833,17834],{"class":4217,"line":4264},[4215,17835,17836],{},"            _drawerToggle.OnOptionsItemSelected(item);  \n",[4215,17838,17839],{"class":4217,"line":4270},[4215,17840,17841],{},"            return true;  \n",[4215,17843,17844],{"class":4217,"line":4276},[4215,17845,10274],{},[4215,17847,17848],{"class":4217,"line":4282},[4215,17849,17850],{},"        \u002F\u002Fcase Resource.Id.action_refresh:  \n",[4215,17852,17853,17856],{"class":4217,"line":4288},[4215,17854,17855],{},"        \u002F\u002F",[4215,17857,17858],{},"    \u002F\u002FRefresh  \n",[4215,17860,17861],{"class":4217,"line":4294},[4215,17862,17863],{},"        \u002F\u002F    return true;  \n",[4215,17865,17866],{"class":4217,"line":4300},[4215,17867,10274],{},[4215,17869,17870],{"class":4217,"line":4306},[4215,17871,17872],{},"        case Resource.Id.action_fragment1:  \n",[4215,17874,17875],{"class":4217,"line":4312},[4215,17876,17877],{},"            \u002F\u002FShowFragment(_fragment1);  \n",[4215,17879,17880],{"class":4217,"line":4318},[4215,17881,10274],{},[4215,17883,17884],{"class":4217,"line":4324},[4215,17885,17886],{},"            if (_fragment1 == null)                      \n",[4215,17888,17889],{"class":4217,"line":4330},[4215,17890,17891],{},"                _fragment1 = new Fragment1();            \n",[4215,17893,17894],{"class":4217,"line":4336},[4215,17895,17896],{},"                  \n",[4215,17898,17899],{"class":4217,"line":4342},[4215,17900,17901],{},"                ReplaceFragment(_fragment1, \"Fragment1\");  \n",[4215,17903,17904],{"class":4217,"line":4348},[4215,17905,17841],{},[4215,17907,17908],{"class":4217,"line":4353},[4215,17909,17910],{},"        case Resource.Id.action_fragment2:  \n",[4215,17912,17913],{"class":4217,"line":4359},[4215,17914,17915],{},"            \u002F\u002FShowFragment(_fragment2);  \n",[4215,17917,17918],{"class":4217,"line":4365},[4215,17919,17920],{},"            if (_fragment2 == null)   \n",[4215,17922,17923],{"class":4217,"line":4371},[4215,17924,17925],{},"                _fragment2 = new Fragment2();  \n",[4215,17927,17928],{"class":4217,"line":4377},[4215,17929,17896],{},[4215,17931,17932],{"class":4217,"line":4383},[4215,17933,17934],{},"            ReplaceFragment(_fragment2, \"Fragment2\");  \n",[4215,17936,17937],{"class":4217,"line":4389},[4215,17938,17841],{},[4215,17940,17941],{"class":4217,"line":4395},[4215,17942,17943],{},"        case Resource.Id.action_fragment3:  \n",[4215,17945,17946],{"class":4217,"line":4401},[4215,17947,17948],{},"            \u002F\u002FShowFragment(_fragment3);  \n",[4215,17950,17951],{"class":4217,"line":4406},[4215,17952,17953],{},"              \n",[4215,17955,17956],{"class":4217,"line":4412},[4215,17957,17958],{},"            if (_fragment3 == null)                      \n",[4215,17960,17961],{"class":4217,"line":4418},[4215,17962,17963],{},"                _fragment3 = new Fragment3();  \n",[4215,17965,17966],{"class":4217,"line":4423},[4215,17967,10274],{},[4215,17969,17970],{"class":4217,"line":4429},[4215,17971,17972],{},"            ReplaceFragment(_fragment3, \"Fragment3\");  \n",[4215,17974,17975],{"class":4217,"line":4435},[4215,17976,17841],{},[4215,17978,17979],{"class":4217,"line":4440},[4215,17980,17981],{},"        case Resource.Id.action_help:  \n",[4215,17983,17984],{"class":4217,"line":4446},[4215,17985,17986],{},"            if (_drawerLayout.IsDrawerOpen(_rightDrawer))  \n",[4215,17988,17989],{"class":4217,"line":4452},[4215,17990,15669],{},[4215,17992,17993],{"class":4217,"line":4458},[4215,17994,17995],{},"                \u002F\u002FRight Drawer is already open, close it  \n",[4215,17997,17998],{"class":4217,"line":4464},[4215,17999,18000],{},"                _drawerLayout.CloseDrawer(_rightDrawer);  \n",[4215,18002,18003],{"class":4217,"line":4469},[4215,18004,15709],{},[4215,18006,18007],{"class":4217,"line":4475},[4215,18008,18009],{},"            else  \n",[4215,18011,18012],{"class":4217,"line":4481},[4215,18013,15669],{},[4215,18015,18016],{"class":4217,"line":4487},[4215,18017,18018],{},"                \u002F\u002FRight Drawer is closed, open it and just in case close left drawer  \n",[4215,18020,18021],{"class":4217,"line":4492},[4215,18022,18023],{},"                _drawerLayout.OpenDrawer(_rightDrawer);  \n",[4215,18025,18026],{"class":4217,"line":4498},[4215,18027,18028],{},"                _drawerLayout.CloseDrawer(_leftDrawer);  \n",[4215,18030,18031],{"class":4217,"line":4504},[4215,18032,15709],{},[4215,18034,18035],{"class":4217,"line":4510},[4215,18036,17841],{},[4215,18038,18039],{"class":4217,"line":4516},[4215,18040,18041],{},"        default:  \n",[4215,18043,18044],{"class":4217,"line":4521},[4215,18045,18046],{},"            return base.OnOptionsItemSelected(item);  \n",[4215,18048,18050],{"class":4217,"line":18049},54,[4215,18051,11671],{},[4215,18053,18055],{"class":4217,"line":18054},55,[4215,18056,9887],{},[16,18058,18059,18060,14501,18062,14178,18064,18067,18070,18072],{},"So finally, why are we using the transaction manager to replace fragments instead of showing and hiding them?  If we load up all fragments upon start up and show\u002Fhide they all are residing in memory which can be problematic if the fragments are large or you have many of them in your application.  Using the replace approach optimizes memory to only work with active fragments.  While a fragment is not in the current layout it is ‘paused’ and the memory footprint is much less.",[1118,18061],{},[1118,18063],{},[1139,18065],{"href":18066,"title":18066},"http:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Fcomponents\u002Ffragments.html",[1139,18068,18066],{"href":18066,"rel":18069},[3695],[1118,18071],{},[1139,18073,18075],{"href":18074},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-fragments-and-orientat_957a-image_2.png",[156,18076],{"style":15953,"src":18077,"border":8404,"alt":158,"title":158,"width":18078,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-fragments-and-orientat_957a-image_thumb.png",228,[4682,18080,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":18082},[],"2016-02-14T04:36:35.5200000-05:00",{},"\u002Farticles\u002Fxamarin-android-fragments-and-orientations-rotation",{"title":17565,"description":17570},"articles\u002Fxamarin-android-fragments-and-orientations-rotation",[9200],"ptH_PqAAUCLJDvJogWefd7tmS1dafuuixCi8v4M0HA8",{"id":18091,"title":18092,"author":8,"body":18093,"createdAt":18223,"description":18224,"extension":1101,"img":18110,"meta":18225,"navigation":1104,"path":18226,"seo":18227,"stem":18228,"tags":18229,"updatedAt":18223,"__hash__":18230},"articles\u002Farticles\u002Fgenerate-insert-update-delete-trigger-for-table-audit.md","Generate Insert, Update, Delete Trigger for Table Audit",{"type":10,"value":18094,"toc":18221},[18095,18100,18113,18116,18125,18219],[16,18096,8422,18097,18099],{},[1118,18098],{},"\nThe following script will evaluate the table specified @TableName (you provide below), create a new table with {name}_Audit and also create insert, update and delete triggers.  In my example my table was Dave_Test in scheme engis.",[16,18101,18102,18103,18105],{},"Here is a screen shot of the end result audit table with the same columns PLUS 2 additional columns to document the action executed against the source table.",[1118,18104],{},[1139,18106,18108],{"href":18107},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-generate-insert-update-delete-trigger-fo_9e1f-image_2.png",[156,18109],{"style":8402,"src":18110,"border":8404,"alt":158,"title":158,"width":18111,"height":18112},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-generate-insert-update-delete-trigger-fo_9e1f-image_thumb.png",521,109,[16,18114,18115],{},"Here you can see the created _Audit table and newly created _Trigger_Delete, _Trigger_Insert and _Trigger_Update",[16,18117,18118],{},[1139,18119,18121],{"href":18120},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-generate-insert-update-delete-trigger-fo_9e1f-image_6.png",[156,18122],{"style":8402,"src":18123,"border":8404,"alt":158,"title":158,"width":8450,"height":18124},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-generate-insert-update-delete-trigger-fo_9e1f-image_thumb_2.png",183,[2232,18126,18128],{"className":7871,"code":18127,"language":7873,"meta":1080,"style":1080},"SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO  \nDECLARE @TableName VARCHAR(200); \nSET @TableName = 'dave_test'; \n-- SET NOCOUNT ON added to prevent extra result sets from \n-- interfering with SELECT statements. \nSET NOCOUNT ON; \n--DECLARE @TABLENAME varchar(100) \nDECLARE @SCHEMA VARCHAR(100); \n--SET @TABLENAME = N'Company' SET @SCHEMA = N'engis';\nDECLARE @Done BIT;\nSET @Done = 0 DECLARE @CRLF CHAR(2);\nSET @CRLF = CHAR(10); DECLARE @SQL VARCHAR(2000); \nSET @SQL = 'IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Audit]'') AND type in (N''U'')) DROP TABLE [' + @SCHEMA + '].[' + @TableName + '_Audit] CREATE TABLE [' + @SCHEMA + '].[' + @TableName + '_Audit] (' + @CRLF; DECLARE @COLUMNID INT; SET @COLUMNID = 0; DECLARE @COLUMNNAME VARCHAR(1000); DECLARE @COLUMNTYPE VARCHAR(100); DECLARE @COLUMNSIZE INT; WHILE @Done = 0 BEGIN SELECT TOP 1 @COLUMNID = clmns.column_id , @COLUMNNAME = clmns.name , @COLUMNTYPE = usrt.name , @COLUMNSIZE = CAST(CASE WHEN baset.name IN ( N'nchar', N'nvarchar' ) AND clmns.max_length &lt;&gt; -1 THEN clmns.max_length \u002F 2 ELSE clmns.max_length END AS INT) FROM sys.tables AS tbl INNER JOIN sys.all_columns AS clmns ON clmns.object_id = tbl.object_id LEFT OUTER JOIN sys.types AS usrt ON usrt.user_type_id = clmns.user_type_id LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = clmns.system_type_id AND baset.user_type_id = baset.system_type_id WHERE ( tbl.name = @TableName AND SCHEMA_NAME(tbl.schema_id) = @SCHEMA ) AND clmns.column_id &gt; @COLUMNID ORDER BY clmns.column_id ASC; IF @@rowcount = 0 BEGIN SET @Done = 1; END; ELSE BEGIN SET @SQL = @SQL + ' [' + @COLUMNNAME + '] [' + @COLUMNTYPE + '] '; IF ( @COLUMNTYPE = 'nchar' OR @COLUMNTYPE = 'nvarchar' OR @COLUMNTYPE = 'varchar' ) SET @SQL = @SQL + '(' + LTRIM(STR(@COLUMNSIZE)) + ') '; \nSET @SQL = @SQL + 'NULL, ' + @CRLF; END; END; SET @SQL = @SQL + ' [' + @TableName + 'UpdateDate] datetime, [' + @TableName + 'UpdateAction] nvarchar(10) ) '; --print @SQL EXEC (@SQL);\nSET @SQL = ' IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Update]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Update] IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete] IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert] '; --print @SQL EXEC(@SQL); SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Update] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER UPDATE AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Update'' FROM inserted END '; EXEC (@SQL); --print @SQL SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER DELETE AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Delete'' FROM deleted END ';\n\nEXEC (@SQL); --print @SQL SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER INSERT AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Insert'' FROM inserted END '; EXEC (@SQL);\n--print @SQL\n",[2239,18129,18130,18135,18140,18145,18150,18155,18160,18165,18170,18175,18180,18185,18190,18195,18200,18205,18209,18214],{"__ignoreMap":1080},[4215,18131,18132],{"class":4217,"line":4218},[4215,18133,18134],{},"SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO  \n",[4215,18136,18137],{"class":4217,"line":1081},[4215,18138,18139],{},"DECLARE @TableName VARCHAR(200); \n",[4215,18141,18142],{"class":4217,"line":1084},[4215,18143,18144],{},"SET @TableName = 'dave_test'; \n",[4215,18146,18147],{"class":4217,"line":4234},[4215,18148,18149],{},"-- SET NOCOUNT ON added to prevent extra result sets from \n",[4215,18151,18152],{"class":4217,"line":4240},[4215,18153,18154],{},"-- interfering with SELECT statements. \n",[4215,18156,18157],{"class":4217,"line":4246},[4215,18158,18159],{},"SET NOCOUNT ON; \n",[4215,18161,18162],{"class":4217,"line":4252},[4215,18163,18164],{},"--DECLARE @TABLENAME varchar(100) \n",[4215,18166,18167],{"class":4217,"line":4258},[4215,18168,18169],{},"DECLARE @SCHEMA VARCHAR(100); \n",[4215,18171,18172],{"class":4217,"line":4264},[4215,18173,18174],{},"--SET @TABLENAME = N'Company' SET @SCHEMA = N'engis';\n",[4215,18176,18177],{"class":4217,"line":4270},[4215,18178,18179],{},"DECLARE @Done BIT;\n",[4215,18181,18182],{"class":4217,"line":4276},[4215,18183,18184],{},"SET @Done = 0 DECLARE @CRLF CHAR(2);\n",[4215,18186,18187],{"class":4217,"line":4282},[4215,18188,18189],{},"SET @CRLF = CHAR(10); DECLARE @SQL VARCHAR(2000); \n",[4215,18191,18192],{"class":4217,"line":4288},[4215,18193,18194],{},"SET @SQL = 'IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Audit]'') AND type in (N''U'')) DROP TABLE [' + @SCHEMA + '].[' + @TableName + '_Audit] CREATE TABLE [' + @SCHEMA + '].[' + @TableName + '_Audit] (' + @CRLF; DECLARE @COLUMNID INT; SET @COLUMNID = 0; DECLARE @COLUMNNAME VARCHAR(1000); DECLARE @COLUMNTYPE VARCHAR(100); DECLARE @COLUMNSIZE INT; WHILE @Done = 0 BEGIN SELECT TOP 1 @COLUMNID = clmns.column_id , @COLUMNNAME = clmns.name , @COLUMNTYPE = usrt.name , @COLUMNSIZE = CAST(CASE WHEN baset.name IN ( N'nchar', N'nvarchar' ) AND clmns.max_length &lt;&gt; -1 THEN clmns.max_length \u002F 2 ELSE clmns.max_length END AS INT) FROM sys.tables AS tbl INNER JOIN sys.all_columns AS clmns ON clmns.object_id = tbl.object_id LEFT OUTER JOIN sys.types AS usrt ON usrt.user_type_id = clmns.user_type_id LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = clmns.system_type_id AND baset.user_type_id = baset.system_type_id WHERE ( tbl.name = @TableName AND SCHEMA_NAME(tbl.schema_id) = @SCHEMA ) AND clmns.column_id &gt; @COLUMNID ORDER BY clmns.column_id ASC; IF @@rowcount = 0 BEGIN SET @Done = 1; END; ELSE BEGIN SET @SQL = @SQL + ' [' + @COLUMNNAME + '] [' + @COLUMNTYPE + '] '; IF ( @COLUMNTYPE = 'nchar' OR @COLUMNTYPE = 'nvarchar' OR @COLUMNTYPE = 'varchar' ) SET @SQL = @SQL + '(' + LTRIM(STR(@COLUMNSIZE)) + ') '; \n",[4215,18196,18197],{"class":4217,"line":4294},[4215,18198,18199],{},"SET @SQL = @SQL + 'NULL, ' + @CRLF; END; END; SET @SQL = @SQL + ' [' + @TableName + 'UpdateDate] datetime, [' + @TableName + 'UpdateAction] nvarchar(10) ) '; --print @SQL EXEC (@SQL);\n",[4215,18201,18202],{"class":4217,"line":4300},[4215,18203,18204],{},"SET @SQL = ' IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Update]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Update] IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete] IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N''[' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert]'')) DROP TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert] '; --print @SQL EXEC(@SQL); SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Update] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER UPDATE AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Update'' FROM inserted END '; EXEC (@SQL); --print @SQL SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Delete] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER DELETE AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Delete'' FROM deleted END ';\n",[4215,18206,18207],{"class":4217,"line":4306},[4215,18208,4231],{"emptyLinePlaceholder":1104},[4215,18210,18211],{"class":4217,"line":4312},[4215,18212,18213],{},"EXEC (@SQL); --print @SQL SET @SQL = 'CREATE TRIGGER [' + @SCHEMA + '].[' + @TableName + '_Trigger_Insert] ON [' + @SCHEMA + '].[' + @TableName + '] AFTER INSERT AS BEGIN SET NOCOUNT ON; INSERT INTO ' + @TableName + '_Audit SELECT *,getdate(),''Insert'' FROM inserted END '; EXEC (@SQL);\n",[4215,18215,18216],{"class":4217,"line":4318},[4215,18217,18218],{},"--print @SQL\n",[4682,18220,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":18222},[],"2016-02-13T07:03:23.3300000-05:00"," \nThe following script will evaluate the table specified @TableName (you provide below), create a new table with {name}_Audit and also create insert, update and delete triggers.  In my example my table was Dave_Test in scheme engis.",{},"\u002Farticles\u002Fgenerate-insert-update-delete-trigger-for-table-audit",{"title":18092,"description":18224},"articles\u002Fgenerate-insert-update-delete-trigger-for-table-audit",[7873],"Dt6NMP0mx0GNm-szVZbRfyE2hv-az2OeYHLGEoaDFqU",{"id":18232,"title":18233,"author":8,"body":18234,"createdAt":18515,"description":18516,"extension":1101,"img":18517,"meta":18518,"navigation":1104,"path":18519,"seo":18520,"stem":18521,"tags":18522,"updatedAt":18515,"__hash__":18523},"articles\u002Farticles\u002Fsql-server-triggers-to-mirror-a-table.md","SQL Server Triggers To Mirror a Table",{"type":10,"value":18235,"toc":18513},[18236,18242,18302,18305,18500,18503,18511],[16,18237,18238,18239,18241],{},"I had a need to mirror any changes to one Sql Server table to another Sql Server table of a different name. Both tables had similar columns and types. In this sample my table is called Dave_Test and my mirror table was Dave_Test_Audit.",[1118,18240],{},"\nI will provide the create table structures in the event you want to replicate my code.",[2232,18243,18245],{"className":7871,"code":18244,"language":7873,"meta":1080,"style":1080},"CREATE TABLE [Dave_Test]( \n    [Emp_ID] [int] IDENTITY(1,1) NOT NULL, \n    [Emp_name] [varchar](100) NULL, \n    [Emp_Sal] [decimal](10, 2) NULL ) ON [PRIMARY]  \n   \nCREATE TABLE [Dave_Test_Audit](\n    [Emp_ID] [int] NULL,\n    [Emp_name] [varchar](100) NULL,\n    [Emp_Sal] [decimal](18, 0) NULL\n) ON [PRIMARY]  \nGO  \n",[2239,18246,18247,18252,18257,18262,18267,18272,18277,18282,18287,18292,18297],{"__ignoreMap":1080},[4215,18248,18249],{"class":4217,"line":4218},[4215,18250,18251],{},"CREATE TABLE [Dave_Test]( \n",[4215,18253,18254],{"class":4217,"line":1081},[4215,18255,18256],{},"    [Emp_ID] [int] IDENTITY(1,1) NOT NULL, \n",[4215,18258,18259],{"class":4217,"line":1084},[4215,18260,18261],{},"    [Emp_name] [varchar](100) NULL, \n",[4215,18263,18264],{"class":4217,"line":4234},[4215,18265,18266],{},"    [Emp_Sal] [decimal](10, 2) NULL ) ON [PRIMARY]  \n",[4215,18268,18269],{"class":4217,"line":4240},[4215,18270,18271],{},"   \n",[4215,18273,18274],{"class":4217,"line":4246},[4215,18275,18276],{},"CREATE TABLE [Dave_Test_Audit](\n",[4215,18278,18279],{"class":4217,"line":4252},[4215,18280,18281],{},"    [Emp_ID] [int] NULL,\n",[4215,18283,18284],{"class":4217,"line":4258},[4215,18285,18286],{},"    [Emp_name] [varchar](100) NULL,\n",[4215,18288,18289],{"class":4217,"line":4264},[4215,18290,18291],{},"    [Emp_Sal] [decimal](18, 0) NULL\n",[4215,18293,18294],{"class":4217,"line":4270},[4215,18295,18296],{},") ON [PRIMARY]  \n",[4215,18298,18299],{"class":4217,"line":4276},[4215,18300,18301],{},"GO\n",[16,18303,18304],{},"Here are my insert, update and delete triggers.",[2232,18306,18308],{"className":7871,"code":18307,"language":7873,"meta":1080,"style":1080},"Create TRIGGER [Dave_Test_Trigger_Delete]   \n   ON  [Dave_Test]   \n   AFTER DELETE  \nAS  \nBEGIN  \n     SET NOCOUNT ON;  \n     DELETE FROM Dave_Test_Audit   \n            WHERE emp_id IN (SELECT emp_id FROM deleted)  \nEND  \n  \nCreate TRIGGER [Dave_Test_Trigger_Insert]   \n   ON  [Dave_Test]   \n   AFTER INSERT  \nAS  \nBEGIN     SET NOCOUNT ON;  \n        INSERT INTO Dave_Test_Audit   \n         SELECT * FROM inserted END  \nEND  \n  \nCREATE TRIGGER [[Dave_Test_Trigger_Update]   \n   ON  [Dave_Test]   \n   AFTER UPDATE  \nAS  \nBEGIN  \n        SET NOCOUNT ON;  \n        IF EXISTS(SELECT * FROM Dave_Test_Audit a JOIN inserted AS i ON a.emp_id=i.emp_id)          \n        BEGIN  \n              UPDATE  Dave_Test_Audit   \n                SET emp_id = i.emp_id,  \n                emp_name = i.emp_name,  \n                emp_sal =  i.emp_sal  \n                FROM inserted i WHERE Dave_Test_Audit.emp_id=i.emp_id           \n              \n        END  \n        ELSE  \n             BEGIN  \n             INSERT INTO Dave_Test_Audit   \n                SELECT * FROM inserted   \n        END        \nEND\n",[2239,18309,18310,18315,18320,18325,18330,18335,18340,18345,18350,18355,18359,18364,18368,18373,18377,18382,18387,18392,18396,18400,18405,18409,18414,18418,18422,18427,18432,18437,18442,18447,18452,18457,18462,18466,18471,18476,18481,18486,18491,18496],{"__ignoreMap":1080},[4215,18311,18312],{"class":4217,"line":4218},[4215,18313,18314],{},"Create TRIGGER [Dave_Test_Trigger_Delete]   \n",[4215,18316,18317],{"class":4217,"line":1081},[4215,18318,18319],{},"   ON  [Dave_Test]   \n",[4215,18321,18322],{"class":4217,"line":1084},[4215,18323,18324],{},"   AFTER DELETE  \n",[4215,18326,18327],{"class":4217,"line":4234},[4215,18328,18329],{},"AS  \n",[4215,18331,18332],{"class":4217,"line":4240},[4215,18333,18334],{},"BEGIN  \n",[4215,18336,18337],{"class":4217,"line":4246},[4215,18338,18339],{},"     SET NOCOUNT ON;  \n",[4215,18341,18342],{"class":4217,"line":4252},[4215,18343,18344],{},"     DELETE FROM Dave_Test_Audit   \n",[4215,18346,18347],{"class":4217,"line":4258},[4215,18348,18349],{},"            WHERE emp_id IN (SELECT emp_id FROM deleted)  \n",[4215,18351,18352],{"class":4217,"line":4264},[4215,18353,18354],{},"END  \n",[4215,18356,18357],{"class":4217,"line":4270},[4215,18358,10274],{},[4215,18360,18361],{"class":4217,"line":4276},[4215,18362,18363],{},"Create TRIGGER [Dave_Test_Trigger_Insert]   \n",[4215,18365,18366],{"class":4217,"line":4282},[4215,18367,18319],{},[4215,18369,18370],{"class":4217,"line":4288},[4215,18371,18372],{},"   AFTER INSERT  \n",[4215,18374,18375],{"class":4217,"line":4294},[4215,18376,18329],{},[4215,18378,18379],{"class":4217,"line":4300},[4215,18380,18381],{},"BEGIN     SET NOCOUNT ON;  \n",[4215,18383,18384],{"class":4217,"line":4306},[4215,18385,18386],{},"        INSERT INTO Dave_Test_Audit   \n",[4215,18388,18389],{"class":4217,"line":4312},[4215,18390,18391],{},"         SELECT * FROM inserted END  \n",[4215,18393,18394],{"class":4217,"line":4318},[4215,18395,18354],{},[4215,18397,18398],{"class":4217,"line":4324},[4215,18399,10274],{},[4215,18401,18402],{"class":4217,"line":4330},[4215,18403,18404],{},"CREATE TRIGGER [[Dave_Test_Trigger_Update]   \n",[4215,18406,18407],{"class":4217,"line":4336},[4215,18408,18319],{},[4215,18410,18411],{"class":4217,"line":4342},[4215,18412,18413],{},"   AFTER UPDATE  \n",[4215,18415,18416],{"class":4217,"line":4348},[4215,18417,18329],{},[4215,18419,18420],{"class":4217,"line":4353},[4215,18421,18334],{},[4215,18423,18424],{"class":4217,"line":4359},[4215,18425,18426],{},"        SET NOCOUNT ON;  \n",[4215,18428,18429],{"class":4217,"line":4365},[4215,18430,18431],{},"        IF EXISTS(SELECT * FROM Dave_Test_Audit a JOIN inserted AS i ON a.emp_id=i.emp_id)          \n",[4215,18433,18434],{"class":4217,"line":4371},[4215,18435,18436],{},"        BEGIN  \n",[4215,18438,18439],{"class":4217,"line":4377},[4215,18440,18441],{},"              UPDATE  Dave_Test_Audit   \n",[4215,18443,18444],{"class":4217,"line":4383},[4215,18445,18446],{},"                SET emp_id = i.emp_id,  \n",[4215,18448,18449],{"class":4217,"line":4389},[4215,18450,18451],{},"                emp_name = i.emp_name,  \n",[4215,18453,18454],{"class":4217,"line":4395},[4215,18455,18456],{},"                emp_sal =  i.emp_sal  \n",[4215,18458,18459],{"class":4217,"line":4401},[4215,18460,18461],{},"                FROM inserted i WHERE Dave_Test_Audit.emp_id=i.emp_id           \n",[4215,18463,18464],{"class":4217,"line":4406},[4215,18465,17953],{},[4215,18467,18468],{"class":4217,"line":4412},[4215,18469,18470],{},"        END  \n",[4215,18472,18473],{"class":4217,"line":4418},[4215,18474,18475],{},"        ELSE  \n",[4215,18477,18478],{"class":4217,"line":4423},[4215,18479,18480],{},"             BEGIN  \n",[4215,18482,18483],{"class":4217,"line":4429},[4215,18484,18485],{},"             INSERT INTO Dave_Test_Audit   \n",[4215,18487,18488],{"class":4217,"line":4435},[4215,18489,18490],{},"                SELECT * FROM inserted   \n",[4215,18492,18493],{"class":4217,"line":4440},[4215,18494,18495],{},"        END        \n",[4215,18497,18498],{"class":4217,"line":4446},[4215,18499,8026],{},[16,18501,18502],{},"So why does my Update trigger deal with inserts?  The master table (Dave_Test) already had rows existing before the triggers were created.  With the update trigger managing inserting and updating records if the record is updated and does yet belong in the master audit table then the recently updated row will be inserted into the audit table for us.",[16,18504,18505,18506,18510],{},"For those old enough – this is ",[1139,18507,18509],{"href":18508,"target":1142},"http:\u002F\u002Fwww.happytrails.org\u002Ftrigger.html","Trigger"," (the smartest horse in the movies)",[4682,18512,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":18514},[],"2016-02-13T07:02:53.5100000-05:00","I had a need to mirror any changes to one Sql Server table to another Sql Server table of a different name.  Read on.","\u002Farticles\u002Fimages\u002FXp0SJTsB7n.png",{},"\u002Farticles\u002Fsql-server-triggers-to-mirror-a-table",{"title":18233,"description":18516},"articles\u002Fsql-server-triggers-to-mirror-a-table",[7873,8743],"oG-qazOpjUVf0yb-VL3IN5WX57TFCezPsA53rRrA00k",{"id":18525,"title":18526,"author":8,"body":18527,"createdAt":18653,"description":18654,"extension":1101,"img":18539,"meta":18655,"navigation":1104,"path":18656,"seo":18657,"stem":18658,"tags":18659,"updatedAt":18653,"__hash__":18660},"articles\u002Farticles\u002Fxamarin-android-use-toolbar-in-place-of-actionbar.md","Xamarin Android - Use Toolbar in place of ActionBar",{"type":10,"value":18528,"toc":18651},[18529,18543,18549,18563,18568,18571,18588,18594,18599,18626,18636,18639,18643],[16,18530,18531,18532,18534,18540,18542],{},"Add references to Xamarin.Android.Support.v7.AppCompat (this will also include Xamarin.Android.Support.v4)",[1118,18533],{},[1139,18535,18537],{"href":18536},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_2.png",[156,18538],{"style":8402,"src":18539,"border":8404,"alt":158,"title":158,"width":8450,"height":13693},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_thumb.png",[1118,18541],{},"\nOpen Main.axml adding the following toolbar element",[2232,18544,18548],{"className":18545},[18546,18547],"brush:","xml;","\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>  \n\u003Candroid.support.v7.widget.Toolbar xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"  \n    xmlns:app=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres-auto\"  \n    android:id=\"@+id\u002Ftoolbar\"  \n    android:layout_height=\"wrap_content\"  \n    android:minHeight=\"?attr\u002FactionBarSize\"  \n    android:background=\"?attr\u002FcolorPrimary\"  \n    android:layout_width=\"match_parent\" \u002F>",[16,18550,18551,18552,18554,18560,18562],{},"Opening in the designer we have",[1118,18553],{},[1139,18555,18557],{"href":18556},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_4.png",[156,18558],{"style":8402,"src":18559,"border":8404,"alt":158,"title":158,"width":15956,"height":9262},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_thumb_1.png",[1118,18561],{},"\nUpdating MainActivity.cs",[2232,18564,18567],{"className":18565},[18546,18566],"csharp;","using System;  \nusing Android.App;  \nusing Android.Content;  \nusing Android.Runtime;  \nusing Android.Views;  \nusing Android.Widget;  \nusing Android.OS;  \nusing SupportToolbar = Android.Support.V7.Widget.Toolbar;  \nusing Android.Support.V7.App;  \nusing Android.Support.V4.Widget;  \nusing System.Collections.Generic;  \n  \nnamespace AppDave  \n{      \n    [Activity(Label = \"AppDave\", MainLauncher = true, Icon = \"@drawable\u002Ficon\", Theme=\"@style\u002FMyTheme\")]  \n    public class MainActivity : ActionBarActivity  \n    {  \n        private SupportToolbar _toolbar;  \n  \n        protected override void OnCreate(Bundle bundle)  \n        {  \n            base.OnCreate(bundle);                      \n            SetContentView(Resource.Layout.Main);  \n  \n            _toolbar = FindViewById\u003CSupportToolbar>(Resource.Id.toolbar);  \n            \u002F\u002Fsets the actionbar to our toolbar  \n            SetSupportActionBar(_toolbar);    \n            \u002F\u002Fwe can now call our toolbar via SupportActionBar  \n            SupportActionBar.Title = \"MyToolbar\";  \n        }  \n  \n        public override bool OnCreateOptionsMenu(IMenu menu)  \n        {              \n            MenuInflater.Inflate(Resource.Menu.action_menu, menu);  \n            return base.OnCreateOptionsMenu(menu);  \n        }  \n    }  \n}",[16,18569,18570],{},"Notes:",[48,18572,18573,18576,18579,18582,18585],{},[51,18574,18575],{},"I am deriving from ActionBarActivity instead of Activity (see above)",[51,18577,18578],{},"I am using a styles.xml. This will be used to specify the theme that will be applied to the activity.  The theme will inherit from the AppCompat.Light theme. Then at this point we can override the default values for that theme.",[51,18580,18581],{},"Note: instead of specifying .NoActionBar as shown below I have read that you can also specify the parent as Theme.AppCompat.Light then the first attribute would be \u003Citem name=”windowActionBar”>false\u003C\u002Fitem>  I found however by specifying no action bar in this manner I had the following exception “Java.Lang.IllegalArgumentException: AppCompat does not support the current theme features”.  As a result I did have to use the .NoActionBar option as shown in the xml snippet.",[51,18583,18584],{},"SetSupportActionBar will be used to actually set the action bar to our toolbar.  At this point, SupportActionBar will be used to call the toolbar.",[51,18586,18587],{},"In order to get the action menu to be inflated on the toolbar use public override OnCreateOptionsMenu",[13,18589,10274,18590,10274],{},[2232,18591,18593],{"className":18592},[18546,18547],"\u003C?xml version=\"1.0\" encoding=\"utf-8\" ?>  \n\u003Cresources>    \n  \u003Cstyle name=\"MyTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">   \n    \u003Citem name=\"colorPrimary\">#2196F3\u003C\u002Fitem>  \n  \u003C\u002Fstyle>  \n\u003C\u002Fresources>  \n",[48,18595,18596],{},[51,18597,18598],{},"The menu within the toolbar is also specified via action_menu.xml.  This will be the quick menu on the top right.",[13,18600,10274,18601],{},[2232,18602,18604,18605],{"className":18603},[18546,18547],"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n\u003Cmenu  \n    xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"  \n    xmlns:app=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres-auto\">  \n",[16,18606,18607,18608,18610,18611,18613,18614,18616,18617,18619,18620,18622,18623,18625],{},"\u003Citem android:id=\"@+id\u002Faction_help\"",[1118,18609],{},"\nandroid:icon=\"@drawable\u002Fic_action_help\"",[1118,18612],{},"\nandroid:title=\"Help\"\u002F>",[1118,18615],{},"\n\u003Citem android:id=\"@+id\u002Faction_refresh\"",[1118,18618],{},"\nandroid:icon=\"@drawable\u002Fic_action_refresh\"",[1118,18621],{},"\nandroid:title=\"Refresh\"\u002F>",[1118,18624],{},"\n\u003C\u002Fmenu>",[16,18627,18628],{},[1139,18629,18631],{"href":18630},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_6.png",[156,18632],{"style":15953,"src":18633,"border":8404,"alt":158,"title":158,"width":18634,"height":18635},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_thumb_2.png",199,318,[16,18637,18638],{},"Note: in the above action menu we did not override the app : showAsAction element.  If I specify showAsAction in the following manner you can see the differences.  When specifying as never the icon is visible to the left of the …",[2232,18640,18642],{"className":18641},[18546,18547],"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>  \n\u003Cmenu  \n    xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"  \n    xmlns:app=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres-auto\">  \n  \n  \u003Citem android:id=\"@+id\u002Faction_help\"  \n        android:icon=\"@drawable\u002Fic_action_help\"  \n        android:title=\"Help\"  \n        app:showAsAction=\"always\"  \n        \u002F>  \n  \n  \u003Citem android:id=\"@+id\u002Faction_refresh\"  \n        android:icon=\"@drawable\u002Fic_action_refresh\"  \n        android:title=\"Refresh\"  \n        app:showAsAction=\"never\"  \n        \u002F>  \n\u003C\u002Fmenu>  \n",[16,18644,18645],{},[1139,18646,18648],{"href":18647},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_8.png",[156,18649],{"style":15953,"src":18650,"border":8404,"alt":158,"title":158,"width":8450,"height":14495},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-use-toolbar-in-place-o_b87d-image_thumb_3.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":18652},[],"2016-02-07T09:50:32.1900000-05:00","A toolbar in place of an actionbar with a menu, the end result.",{},"\u002Farticles\u002Fxamarin-android-use-toolbar-in-place-of-actionbar",{"title":18526,"description":18654},"articles\u002Fxamarin-android-use-toolbar-in-place-of-actionbar",[9200],"3MdES8JhgEfxYHKgSOClj6WwiA-BKs6xZS5LaqZ_HSc",{"id":18662,"title":18663,"author":8,"body":18664,"createdAt":18708,"description":1915,"extension":1101,"img":18709,"meta":18710,"navigation":1104,"path":18711,"seo":18712,"stem":18713,"tags":18714,"updatedAt":18708,"__hash__":18715},"articles\u002Farticles\u002Fxamarin-no-intellisense-in-axml-files.md","Xamarin No Intellisense in Xaml files",{"type":10,"value":18665,"toc":18706},[18666,18672,18683,18701],[16,18667,18668,18671],{},[19,18669,18670],{},"Issue: ","Opening up AXML file and no intellisense in Visual Studio",[48,18673,18674,18677,18680],{},[51,18675,18676],{},"open file explorer, navigate to c:\\program files (x86)\\MSBuild\\Xamarin",[51,18678,18679],{},"copy android-layout-xml.xsd and schemas.android.com.apk.res.android.xsd to C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Xml\\Schemas",[51,18681,18682],{},"XML – Schemas and Add selecting the 2 xsd files",[13,18684,10274,18685,10274,18692,10274],{},[1139,18686,18688],{"href":18687},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_bee7-image_thumb-3-_2.png",[156,18689],{"style":18690,"src":18691,"border":8404,"alt":12583,"title":12583,"width":8450,"height":13187},"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;","\u002Farticles\u002Fimages\u002Fimages\u002Fwindows-live-writer-xamarin_bee7-image_thumb-3-_thumb.png",[1139,18693,18695],{"href":18694},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_bee7-image_thumb-6-_2.png",[156,18696],{"style":18690,"src":18697,"border":8404,"alt":18698,"title":18698,"width":18699,"height":18700},"\u002Farticles\u002Fimages\u002Fimages\u002Fwindows-live-writer-xamarin_bee7-image_thumb-6-_thumb.png","image_thumb[6]",414,112,[48,18702,18703],{},[51,18704,18705],{},"Restart Visual Studio and your intellisense should be working now.",{"title":1080,"searchDepth":1081,"depth":1081,"links":18707},[],"2016-02-07T06:35:18.3500000-05:00","\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_bee7-image_thumb-3-_thumb.png",{},"\u002Farticles\u002Fxamarin-no-intellisense-in-axml-files",{"title":18663,"description":1915},"articles\u002Fxamarin-no-intellisense-in-axml-files",[9200],"d2O3r4wtEPfVXQIoN_pal9vSxXjlFioRYQ0UIQJX7IQ",{"id":18717,"title":18718,"author":8,"body":18719,"createdAt":18787,"description":1915,"extension":1101,"img":18766,"meta":18788,"navigation":1104,"path":18789,"seo":18790,"stem":18791,"tags":18792,"updatedAt":18787,"__hash__":18793},"articles\u002Farticles\u002Fxamarin-please-install-package-android-support-library.md","Xamarin Please install package ‘Android Support Library’",{"type":10,"value":18720,"toc":18785},[18721,18724,18752,18768,18775,18782],[16,18722,18723],{},"  My Xamarin Android project would not build.  The build output had the following exception\u002Ferror.\nSeverity Code Description Project File Line Suppression State Error",[2232,18725,18727],{"className":8648,"code":18726,"language":8650,"meta":1080,"style":1080},"Please install package: 'Xamarin.Android.Support.v4' available in SDK installer. \nAndroid resource directory C:\\Users\\{username}\\AppData\\Local\\Xamarin\\Android.Support.v4\\22.2.0\\embedded\\.\u002F doesn't exist.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \nC:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.Common.targets 349&nbsp;&nbsp;&nbsp;  \n",[2239,18728,18729,18734,18744],{"__ignoreMap":1080},[4215,18730,18731],{"class":4217,"line":4218},[4215,18732,18733],{"class":8259},"Please install package: 'Xamarin.Android.Support.v4' available in SDK installer. \n",[4215,18735,18736,18739,18742],{"class":4217,"line":1081},[4215,18737,18738],{"class":8259},"Android resource directory C:\\Users\\{username}\\AppData\\Local\\Xamarin\\Android.Support.v4\\22.2.0\\embedded\\.\u002F doesn't exist.",[4215,18740,18741],{"class":8255},"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",[4215,18743,8216],{"class":8259},[4215,18745,18746,18749],{"class":4217,"line":1084},[4215,18747,18748],{"class":8259},"C:\\Program Files (x86)\\MSBuild\\Xamarin\\Android\\Xamarin.Android.Common.targets 349",[4215,18750,18751],{"class":8255},"&nbsp;&nbsp;&nbsp;\n",[16,18753,18754,18755,18760,18761],{},"I started to get this error after adding the component Android Support Library v7 AppCompat (version 22.2.0.0) This component has dependencies on Xamarin.Android.Support.v4.\nAfter much time and looking at Android SDK’s ",[19,18756,18757],{},[9125,18758,18759],{},"the resolution"," was to remove the respective zip file from this directory\nC:\\Users{username}\\AppData\\Local\\Xamarin\\zips. Once I did this, a fresh build would re-download this package and unzip appropriate references\nto C:\\Users{username}\\AppData\\Local\\Xamarin.  In addition you can delete everything in the C:\\Users{username}\\AppData\\Local\\Xamarin\\Android.Support.v4 directory.\n",[1139,18762,18764],{"href":18763},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_6.png",[156,18765],{"title":158,"style":16154,"border":8404,"alt":158,"src":18766,"width":16710,"height":18767},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_thumb_2.png",88,[1139,18769,18771],{"href":18770},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_4.png",[156,18772],{"title":158,"style":16154,"border":8404,"alt":158,"src":18773,"width":18774,"height":4504},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_thumb_1.png",411,[1139,18776,18778],{"href":18777},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_2.png",[156,18779],{"title":158,"style":16154,"border":8404,"alt":158,"src":18780,"width":10383,"height":18781},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-245aeb9a3723_fde8-image_thumb.png",233,[4682,18783,18784],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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":1080,"searchDepth":1081,"depth":1081,"links":18786},[],"2016-02-06T12:29:47.8100000-05:00",{},"\u002Farticles\u002Fxamarin-please-install-package-android-support-library",{"title":18718,"description":1915},"articles\u002Fxamarin-please-install-package-android-support-library",[9200],"8pRh1b0XfQH5mWwb5lohfycB3F0kfUGsZ2iKu_RUjUQ",{"id":18795,"title":18796,"author":8,"body":18797,"createdAt":18859,"description":18860,"extension":1101,"img":18809,"meta":18861,"navigation":1104,"path":18862,"seo":18863,"stem":18864,"tags":18865,"updatedAt":18859,"__hash__":18866},"articles\u002Farticles\u002Fxamarin-android-actionbar.md","Xamarin Android ActionBar",{"type":10,"value":18798,"toc":18857},[18799,18814,18818,18821,18825,18828,18832],[16,18800,18801,18802,18804,18811,18813],{},"Ok so in prior posts I talked about adding drawer layout to my android project.  Today, I am going to add an actionbar to the project.  Starting with the end result of my first attempt see below.  I have an activity with tabs on each view.",[1118,18803],{},[1139,18805,18807],{"href":18806},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_a3b5-image_2.png",[156,18808],{"style":8402,"src":18809,"border":8404,"alt":158,"title":158,"width":18810,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_a3b5-image_thumb.png",151,[1118,18812],{},"\nThis is how that was accomplished.  Within the OnCreate(Bundle bundle) method of the Activity",[2232,18815,18817],{"className":18816},[18546,18566],"this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;              \nAddTab(\"Tab 1\", Resource.Drawable.ic_tab_white, new SampleTabFragment());  \nAddTab(\"Tab 2\", Resource.Drawable.ic_tab_white, new SampleTabFragment2());  \n  \nif (bundle != null)     this.ActionBar.SelectTab(this.ActionBar.GetTabAt(bundle.GetInt(\"tab\")));",[16,18819,18820],{},"Adding method AddTab",[2232,18822,18824],{"className":18823},[18546,18566],"        void AddTab(string tabText, int iconResourceId, Fragment view)  \n        {  \n            var tab = this.ActionBar.NewTab();  \n            tab.SetText(tabText);  \n            tab.SetIcon(Resource.Drawable.ic_tab_white);  \n  \n            \u002F\u002F must set event handler before adding tab  \n  \n            tab.TabSelected += delegate (object sender, Android.App.ActionBar.TabEventArgs e)  \n            {  \n                var fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout);  \n                if (fragment != null)  \n                    e.FragmentTransaction.Remove(fragment);  \n                e.FragmentTransaction.Add(Resource.Id.frameLayout, view);  \n            };  \n            tab.TabUnselected += delegate (object sender, Android.App.ActionBar.TabEventArgs e) {  \n                e.FragmentTransaction.Remove(view);  \n            };  \n  \n            this.ActionBar.AddTab(tab);  \n        }",[16,18826,18827],{},"Adding fragment classes for the end target for selecting a tab",[2232,18829,18831],{"className":18830},[18546,18566],"    public class SampleTabFragment : Fragment  \n    {  \n        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)  \n        {  \n            base.OnCreateView(inflater, container, savedInstanceState);  \n  \n            var view = inflater.Inflate(Resource.Layout.Tab, container, false);  \n            var sampleTextView = view.FindViewById\u003CTextView>(Resource.Id.sampleTextView);  \n            sampleTextView.Text = \"sample fragment text\";  \n  \n            return view;  \n        }  \n    }  \n  \n    public class SampleTabFragment2 : Fragment  \n    {  \n        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)  \n        {  \n            base.OnCreateView(inflater, container, savedInstanceState);  \n  \n            var view = inflater.Inflate(Resource.Layout.Tab, container, false);  \n            var sampleTextView = view.FindViewById\u003CTextView>(Resource.Id.sampleTextView);  \n            sampleTextView.Text = \"sample fragment text 2\";  \n  \n            return view;  \n        }  \n    }",[16,18833,18834,18835,18837,18838,18841,18843,18844,18846,18847,18849],{},"When a user selects a tab, we have them hooked up to show the respective fragment.  I also noticed that the code within the TabSelected event could be replaced by the following FragmentManager code",[1118,18836],{},"\ntab.TabSelected += delegate (object sender, Android.App.ActionBar.TabEventArgs e) { \u002F\u002Fvar fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout); \u002F\u002Fif (fragment != null) \u002F\u002Fe.FragmentTransaction.Remove(fragment); \u002F\u002Fe.FragmentTransaction.Add(Resource.Id.frameLayout, view);    ",[19,18839,18840],{}," base.FragmentManager.BeginTransaction().Replace(Resource.Id.frameLayout, view).Commit(",[1118,18842],{},"\n};",[1118,18845],{},"\nWhile the above works to show tabs in my sample application this is not really what I am looking for. The following guide shows the different aspects of the ActionBar.  In our above example we were working with Tab Navigation.  Ideally, what I am looking for is how to get my tabs where the action buttons are shown.",[1118,18848],{},[1139,18850,18852],{"href":18851},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_a3b5-image_4.png",[156,18853],{"style":15953,"src":18854,"border":8404,"alt":158,"title":158,"width":18855,"height":18856},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin_a3b5-image_thumb_1.png",290,279,{"title":1080,"searchDepth":1081,"depth":1081,"links":18858},[],"2016-02-06T08:02:02.1700000-05:00","More fun with actionbars with Xamarin",{},"\u002Farticles\u002Fxamarin-android-actionbar",{"title":18796,"description":18860},"articles\u002Fxamarin-android-actionbar",[9200],"D9kSu3OBx2kAPQJfH-P1Y6pJDljKlYK_lEnLxL0fRJM",{"id":18868,"title":18869,"author":8,"body":18870,"createdAt":18916,"description":18874,"extension":1101,"img":18913,"meta":18917,"navigation":1104,"path":18918,"seo":18919,"stem":18920,"tags":18921,"updatedAt":18916,"__hash__":18922},"articles\u002Farticles\u002Fxamarin-android-listviews-part-2-of-2.md","Xamarin Android - ListViews Part 2 of 2",{"type":10,"value":18871,"toc":18914},[18872,18875,18879,18885,18889,18895,18903],[16,18873,18874],{},"Continuing on from an older post, we will modify our listview to display 2 columns.  Ultimately, we will put an image in the left column and text in the right column.  Currently we have created an ArrayAdapter which takes a list\u002Fcollection of strings and displays each row in a template.  The template was defined in a layout TextViewItem.axml",[2232,18876,18878],{"className":18877},[18546,18547],"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>  \n\u003CTextView xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"  \n    android:id=\"@+id\u002FtextItem\"  \n    android:textSize=\"44sp\"  \n    android:layout_width=\"fill_parent\"  \n    android:layout_height=\"wrap_content\" \u002F>",[16,18880,18881,18882,18884],{},"What we have was an ArrayAdapter which required the above row definition with a collection of strings.  This worked fine to display the ToString() of either the string collection you provided or the object collection you used in the definition.",[1118,18883],{},"\nMoving forward this post will use a more advanced row template to display a string or an object collection.  This ultimately gives us more flexibility.  To do this we will create a custom Adapter which manages the displays aspect of the listview.  By doing this we can provide a collection of objects and then through our custom adapter we can position each property within our new row template.  Our new row template TextViewItem2.axml will be defined by the following.",[2232,18886,18888],{"className":18887},[18546,18547],"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>  \n\u003CLinearLayout xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"  \n    android:orientation=\"vertical\"  \n    android:layout_width=\"match_parent\"  \n    android:layout_height=\"match_parent\"  \n    android:minWidth=\"25px\"  \n    android:minHeight=\"25px\">  \n    \u003CLinearLayout  \n        android:orientation=\"horizontal\"  \n        android:minWidth=\"25px\"  \n        android:minHeight=\"25px\"  \n        android:layout_width=\"match_parent\"  \n        android:layout_height=\"wrap_content\"  \n        android:id=\"@+id\u002FlinearLayout1\">  \n        \u003CTextView  \n            android:id=\"@+id\u002FtextItem1\"  \n            android:textSize=\"44sp\"  \n            android:layout_width=\"wrap_content\"  \n            android:layout_height=\"fill_parent\" \u002F>  \n        \u003CTextView  \n            android:id=\"@+id\u002FtextItem2\"  \n            android:textSize=\"44sp\"  \n            android:layout_width=\"wrap_content\"  \n            android:layout_height=\"fill_parent\" \u002F>  \n    \u003C\u002FLinearLayout>  \n\u003C\u002FLinearLayout>",[16,18890,18891,18892,18894],{},"Here you can see we have a LinearLayout parent and a LinearLayout (horizontal orientation) established to display 2 textviews side by side.",[1118,18893],{},"\nNow to the adapter, as mentioned above we have to build out a custom adapter as this adapter will be responsible for take each item in our collection and mapping our object properties to specific controls in the above textviewitem template.",[2232,18896,18898,18899,18902],{"className":18897},[18546,18566],"   public class AboutScreenAdapter : BaseAdapter\u003CMyDetail>  \n    {  \n        List\u003CMyDetail> _items;  \n        Activity _context;  \n        public AboutScreenAdapter(Activity context, List\u003CMyDetail> items) : base()  \n        {  \n            this._context = context;  \n            this._items = items;  \n        }  \n        public override long GetItemId(int position)  \n        {  \n            return position;  \n        }  \n        public override MyDetail this[int position]  \n        {  \n            get { return _items[position]; }              \n        }  \n  \n        public override int Count  \n        {  \n            get { return _items.Count; }  \n        }  \n        public override View GetView(int position, View convertView, ViewGroup parent)  \n        {  \n            View view = convertView; \u002F\u002F re-use an existing view, if one is available  \n            if (view == null) \u002F\u002F otherwise create a new one  \n                view = _context.LayoutInflater.Inflate(Resource.Layout.",[19,18900,18901],{},"TextViewItem2",", null);  \n              \n            \u002F\u002Fview.FindViewById\u003CTextView>(Android.Resource.Id.text).Text = items[position];  \n  \n            view.FindViewById\u003CTextView>(Resource.Id.textItem1).Text = _items[position].Image;  \n            view.FindViewById\u003CTextView>(Resource.Id.textItem2).Text = _items[position].Detail;  \n            return view;  \n        }  \n    }",[16,18904,18905,18906,18908],{},"Above you can see, we provide our object collection List\u003CMyDetail> items and the row template is defined (bold) TextViewItem2 which is established by a layout in our layouts folder TextViewItem2.axml",[1118,18907],{},[1139,18909,18911],{"href":18910},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-listviews-part-2_6274-image_2.png",[156,18912],{"style":18690,"src":18913,"border":8404,"alt":158,"title":158,"width":13532,"height":8473},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-listviews-part-2_6274-image_thumb.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":18915},[],"2016-02-01T00:32:33.2900000-05:00",{},"\u002Farticles\u002Fxamarin-android-listviews-part-2-of-2",{"title":18869,"description":18874},"articles\u002Fxamarin-android-listviews-part-2-of-2",[9200],"GDfb7Zf3hkjwtI7FU52rUJ_1EeuzVTcDs_ng1XAI9yo",{"id":18924,"title":18925,"author":8,"body":18926,"createdAt":19176,"description":1915,"extension":1101,"img":18956,"meta":19177,"navigation":1104,"path":19178,"seo":19179,"stem":19180,"tags":19181,"updatedAt":19176,"__hash__":19182},"articles\u002Farticles\u002Fxamarin-andorid-listviews-part-1-of-2.md","Xamarin Android ListViews Part 1 of 2",{"type":10,"value":18927,"toc":19174},[18928,18937,18951,18959,18962,18965,19028,19031,19105,19108,19158,19161,19172],[16,18929,18930,18931,18933,18934,18936],{},"Continuing from my drawer example code…I have a fragment (About) where I want to show a number of rows.  There are a few ways of doing this but in my case I am going to use a ListView.",[1118,18932],{},"\nA ListView is an important UI component of Android applications, used everywhere from short lists of menu options to long lists of contacts or internet favorites.",[1118,18935],{},"\nIn our example we have the following components that make up our Activity.",[48,18938,18939,18942,18945,18948],{},[51,18940,18941],{},"Activity the entire view",[51,18943,18944],{},"Red (our fragment)",[51,18946,18947],{},"Green (our listview)",[51,18949,18950],{},"Light Blue (our textview)",[1139,18952,18954],{"href":18953},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-listviews_aae8-image_2.png",[156,18955],{"style":8402,"src":18956,"border":8404,"alt":158,"title":158,"width":18957,"height":18958},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-listviews_aae8-image_thumb.png",249,404,[16,18960,18961],{},"Because we are working with Fragments we build our code within the OnCreateView method. ",[16,18963,18964],{},"I have been able to do this within OnActivityCreated as well.",[2232,18966,18968],{"className":9998,"code":18967,"language":10000,"meta":1080,"style":1080},"public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)\n{\n    string[] recs = new string[2];\n    recs[0] = \"my first row\";\n    recs[1] = \"my second row\";  \n    View view = inflater.Inflate(Resource.Layout.About, container, false);\n    \u002F\u002F_context = container.Context;             \n    var listView = view.FindViewById\u003CListView>(Resource.Id.aboutListView);\n    var adapter = new ArrayAdapter\u003Cstring>(this.Activity, Resource.Layout.TextViewItem, recs);  \u002F\u002Fyou can get context also by container.Context\n    listView.Adapter = adapter;\n    return view;\n}  \n",[2239,18969,18970,18975,18979,18984,18989,18994,18999,19004,19009,19014,19019,19024],{"__ignoreMap":1080},[4215,18971,18972],{"class":4217,"line":4218},[4215,18973,18974],{},"public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)\n",[4215,18976,18977],{"class":4217,"line":1081},[4215,18978,15747],{},[4215,18980,18981],{"class":4217,"line":1084},[4215,18982,18983],{},"    string[] recs = new string[2];\n",[4215,18985,18986],{"class":4217,"line":4234},[4215,18987,18988],{},"    recs[0] = \"my first row\";\n",[4215,18990,18991],{"class":4217,"line":4240},[4215,18992,18993],{},"    recs[1] = \"my second row\";  \n",[4215,18995,18996],{"class":4217,"line":4246},[4215,18997,18998],{},"    View view = inflater.Inflate(Resource.Layout.About, container, false);\n",[4215,19000,19001],{"class":4217,"line":4252},[4215,19002,19003],{},"    \u002F\u002F_context = container.Context;             \n",[4215,19005,19006],{"class":4217,"line":4258},[4215,19007,19008],{},"    var listView = view.FindViewById\u003CListView>(Resource.Id.aboutListView);\n",[4215,19010,19011],{"class":4217,"line":4264},[4215,19012,19013],{},"    var adapter = new ArrayAdapter\u003Cstring>(this.Activity, Resource.Layout.TextViewItem, recs);  \u002F\u002Fyou can get context also by container.Context\n",[4215,19015,19016],{"class":4217,"line":4270},[4215,19017,19018],{},"    listView.Adapter = adapter;\n",[4215,19020,19021],{"class":4217,"line":4276},[4215,19022,19023],{},"    return view;\n",[4215,19025,19026],{"class":4217,"line":4282},[4215,19027,9887],{},[16,19029,19030],{},"In this example Resource.Layout.About is the name of my Fragment (public class AboutFragment : Fragment),\nResource.Id.aboutListView is referencing the ListView that was placed in the About.axml (see below), and the Resource.Layout.TextViewItem (blue)\nrepresents each row.",[2232,19032,19034],{"className":9025,"code":19033,"language":9027,"meta":1080,"style":1080},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003CLinearLayout xmlns:android=\"\u003Ca href=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid&quot;\">http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\u003C\u002Fa>\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:minWidth=\"25px\"\n    android:minHeight=\"25px\">\n    \u003CListView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:id=\"@+id\u002FaboutListView\" \u002F>\n\u003C\u002FLinearLayout>\n",[2239,19035,19036,19040,19045,19050,19055,19060,19065,19070,19075,19080,19085,19090,19095,19100],{"__ignoreMap":1080},[4215,19037,19038],{"class":4217,"line":4218},[4215,19039,9034],{},[4215,19041,19042],{"class":4217,"line":1081},[4215,19043,19044],{},"\u003CLinearLayout xmlns:android=\"\u003Ca href=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid&quot;\">http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\u003C\u002Fa>\n",[4215,19046,19047],{"class":4217,"line":1084},[4215,19048,19049],{},"    android:orientation=\"vertical\"\n",[4215,19051,19052],{"class":4217,"line":4234},[4215,19053,19054],{},"    android:layout_width=\"match_parent\"\n",[4215,19056,19057],{"class":4217,"line":4240},[4215,19058,19059],{},"    android:layout_height=\"match_parent\"\n",[4215,19061,19062],{"class":4217,"line":4246},[4215,19063,19064],{},"    android:minWidth=\"25px\"\n",[4215,19066,19067],{"class":4217,"line":4252},[4215,19068,19069],{},"    android:minHeight=\"25px\">\n",[4215,19071,19072],{"class":4217,"line":4258},[4215,19073,19074],{},"    \u003CListView\n",[4215,19076,19077],{"class":4217,"line":4264},[4215,19078,19079],{},"        android:minWidth=\"25px\"\n",[4215,19081,19082],{"class":4217,"line":4270},[4215,19083,19084],{},"        android:minHeight=\"25px\"\n",[4215,19086,19087],{"class":4217,"line":4276},[4215,19088,19089],{},"        android:layout_width=\"match_parent\"\n",[4215,19091,19092],{"class":4217,"line":4282},[4215,19093,19094],{},"        android:layout_height=\"match_parent\"\n",[4215,19096,19097],{"class":4217,"line":4288},[4215,19098,19099],{},"        android:id=\"@+id\u002FaboutListView\" \u002F>\n",[4215,19101,19102],{"class":4217,"line":4294},[4215,19103,19104],{},"\u003C\u002FLinearLayout>\n",[16,19106,19107],{},"This is another way of approaching inside the OnActivityCreated method",[2232,19109,19111],{"className":9998,"code":19110,"language":10000,"meta":1080,"style":1080},"public override void OnActivityCreated(Bundle savedInstanceState)\n{\n    base.OnActivityCreated(savedInstanceState);    \n    string[] recs = new string[2];\n    recs[0] = \"my first row\";\n    recs[1] = \"my second row\";\n    var listView = this.Activity.FindViewById\u003CListView>(Resource.Id.aboutListView);            \n    var adapter = new ArrayAdapter\u003Cstring>(_context, Resource.Layout.TextViewItem, recs);\n    listView.Adapter = adapter;\n}  \n",[2239,19112,19113,19118,19122,19127,19131,19135,19140,19145,19150,19154],{"__ignoreMap":1080},[4215,19114,19115],{"class":4217,"line":4218},[4215,19116,19117],{},"public override void OnActivityCreated(Bundle savedInstanceState)\n",[4215,19119,19120],{"class":4217,"line":1081},[4215,19121,15747],{},[4215,19123,19124],{"class":4217,"line":1084},[4215,19125,19126],{},"    base.OnActivityCreated(savedInstanceState);    \n",[4215,19128,19129],{"class":4217,"line":4234},[4215,19130,18983],{},[4215,19132,19133],{"class":4217,"line":4240},[4215,19134,18988],{},[4215,19136,19137],{"class":4217,"line":4246},[4215,19138,19139],{},"    recs[1] = \"my second row\";\n",[4215,19141,19142],{"class":4217,"line":4252},[4215,19143,19144],{},"    var listView = this.Activity.FindViewById\u003CListView>(Resource.Id.aboutListView);            \n",[4215,19146,19147],{"class":4217,"line":4258},[4215,19148,19149],{},"    var adapter = new ArrayAdapter\u003Cstring>(_context, Resource.Layout.TextViewItem, recs);\n",[4215,19151,19152],{"class":4217,"line":4264},[4215,19153,19018],{},[4215,19155,19156],{"class":4217,"line":4270},[4215,19157,9887],{},[16,19159,19160],{},"TextViewItem.axml",[16,19162,19163,19164,19167,19171],{},"\u003CTextView xmlns:android=\"",[1139,19165],{"href":19166},"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"",[1139,19168,19169],{"href":19169,"rel":19170},"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid",[3695],"\"\n    android:id=\"@+id\u002FtextItem\"\n    android:textSize=\"44sp\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"wrap_content\" \u002F>",[4682,19173,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":19175},[],"2016-01-31T05:38:21.5000000-05:00",{},"\u002Farticles\u002Fxamarin-andorid-listviews-part-1-of-2",{"title":18925,"description":1915},"articles\u002Fxamarin-andorid-listviews-part-1-of-2",[9200],"JuRG_Zcn0MsuFdCH2GNMKvH012bu4uX_lZwaO7XegO4",{"id":19184,"title":19185,"author":8,"body":19186,"createdAt":19421,"description":19422,"extension":1101,"img":19235,"meta":19423,"navigation":1104,"path":19424,"seo":19425,"stem":19426,"tags":19427,"updatedAt":19421,"__hash__":19428},"articles\u002Farticles\u002Fxamarin-android-drawerlayout.md","Xamarin Android - DrawerLayout",{"type":10,"value":19187,"toc":19419},[19188,19282,19326,19364],[16,19189,19190,19191,19195,19196,19198,19199,19201,19202,19204,19207,19208,19210,19211,19213,19214,19216,19217,19219,19220,19222,19223,19227,19228,19230,19237,19239,19240,19242,19243,19245,19246,19248,19249,19251,19252,19254,19255,19257,8422,19263,19269,19271,19272,19274,19275,19277,19278,19281],{},"To add a navigation drawer, declare your user interface with a ",[1139,19192,19194],{"href":19193},"http:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fsupport\u002Fv4\u002Fwidget\u002FDrawerLayout.html","DrawerLayout"," object as the root view of your layout. Inside the ",[1139,19197,19194],{"href":19193},", add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of the navigation drawer.",[1118,19200],{},"\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Candroid.support.v4.widget.DrawerLayout\nxmlns:android=\"",[1139,19203],{"href":19169},[1139,19205,19169],{"href":19169,"rel":19206},[3695],"\"\nandroid:id=\"@+id\u002FdrawerLayout\"\n   android:layout_width =\"match_parent\"\n    android:layout_height=\"match_parent\">",[1118,19209],{},"\n  \u003C!-- Content -->\n  \u003CFrameLayout\n        android:id =\"@+id\u002FframeLayout\"\n        android:layout_width =\"match_parent\"\n        android:layout_height=\"match_parent\" \u002F>",[1118,19212],{},"\n  \u003C!-- Navigation drawer menu -->\n  \u003CListView\n        android:id=\"@+id\u002FdrawerListView\"\n        android:layout_gravity=\"start\"\n        android:choiceMode    =\"singleChoice\"\n        android:layout_width  =\"240dp\"\n        android:layout_height =\"match_parent\"\n        android:background =\"?android:attr\u002FwindowBackground\" \u002F>",[1118,19215],{},"\n\u003C\u002Fandroid.support.v4.widget.DrawerLayout>",[1118,19218],{},"\nThe above layout uses a DrawerLayout with two child views: a FrameLayout to contain the main content which will be populated with a Fragment at runtime, and a ListView for the contents of the drawer.",[1118,19221],{},"\nNow to the MainActivity.cs coding.. let’s get a reference to the drawerLayout = FindViewById\u003CDrawerLayout>(Resource.Id.drawerLayout);  You will find that DrawerLayout is not defined.  You need to add a reference via Nuget to ",[1139,19224,19226],{"href":19225,"target":1142},"https:\u002F\u002Fcomponents.xamarin.com\u002Fview\u002Fxamandroidsupportv4-18","Android Support Library v4",".  Open Nuget and search for Xamarin.android.support.v4",[1118,19229],{},[1139,19231,19233],{"href":19232},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_2.png",[156,19234],{"style":15953,"src":19235,"border":8404,"alt":158,"title":158,"width":19236,"height":12930},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb.png",374,[1118,19238],{},"\nAndroid Support Libraries : The Android Support Libraries are a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs. Each Support Library is backward-compatible to a specific Android API level. This design means that your applications can use the libraries' features and still be compatible with devices running older versions of Android.  Including the Support Libraries in your Android project is considered a best practice for application developers.",[1118,19241],{},"\nAdding a using statement for Android.Support.V4.Widget will complete the reference to DrawerLayout.",[1118,19244],{},"\n_menuItems = new string",[4215,19247],{}," { \"Welcome\", \"Options\", \"About\" };\n_drawerLayout = FindViewById\u003CDrawerLayout>(Resource.Id.drawerLayout);\n_drawerList = FindViewById\u003CListView>(Resource.Id.drawerListView);\n_drawerList.Adapter = new ArrayAdapter\u003Cstring>(this, Resource.Layout.ListViewMenuRow, Resource.Id.menuRowTextView, _menuItems);",[1118,19250],{},"\nWe have a List which should be populated by an Adapter (ArrayAdapter or SimplerCursorAdaptor)",[1118,19253],{},"\nAt this point we have (left) and if you swipe toward the right you see the menu.",[1118,19256],{},[1139,19258,19260],{"href":19259},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_4.png",[156,19261],{"style":15953,"src":19262,"border":8404,"alt":158,"title":158,"width":18810,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb_1.png",[1139,19264,19266],{"href":19265},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_6.png",[156,19267],{"style":18690,"src":19268,"border":8404,"alt":158,"title":158,"width":18810,"height":8473},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb_2.png",[1118,19270],{},"\nHooking up the menu click looks like..",[1118,19273],{},"\n_drawerList.ItemClick += _drawerList_ItemClick;",[1118,19276],{},"\nprivate void _drawerList_ItemClick(object sender, AdapterView.ItemClickEventArgs e)\n{\n    OnMenuItemClick(e.Position);\n}private void OnMenuItemClick(int position)\n{\n    this.Title = _menuItems",[4215,19279,19280],{},"position",";\n}",[16,19283,19284,19285,19287,19288,19281,19290,19292,19293,19297,19298,19302,19303,1158,19307,19311,19313,19314,19316,19317,19319,19320,19322,19323,19325],{},"If you want to use lambda the above can be rewritten..",[1118,19286],{},"\n_drawerList.ItemClick += (object sender, AdapterView.ItemClickEventArgs e) => OnMenuItemClick(e.Position);\nprivate void OnMenuItemClick(int position)\n{\n    this.Title = _menuItems",[4215,19289,19280],{},[1118,19291],{},"\nNow we have to deal with showing a view after clicking a menu item.  We will do this implementation with Fragments.  A Fragment is a piece of an application's user interface or behavior that can be placed in an ",[1139,19294,19296],{"href":19295},"http:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fapp\u002FActivity.html","Activity",". Interaction with fragments is done through ",[1139,19299,19301],{"href":19300},"http:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fapp\u002FFragmentManager.html","FragmentManager",", which can be obtained via ",[1139,19304,19306],{"href":19305},"http:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fapp\u002FActivity.html#getFragmentManager()","Activity.getFragmentManager()",[1139,19308,19310],{"href":19309},"http:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fapp\u002FFragment.html#getFragmentManager()","Fragment.getFragmentManager()",[1118,19312],{},"\nAt this point, we declare field parameter Fragment",[4215,19315],{}," _fragments\nprivate Fragment",[4215,19318],{}," _fragments = new Fragment",[4215,19321],{},"{ new WelcomeFragment(), new OptionsFragment(), new AboutFragment() };",[1118,19324],{},"\nand within the menu click, use the FragmentManager to set the selected fragment using the position in the array.",[16,19327,19328,19329,19331,19332,19334,19335,19337,19338,19340,19341,19343,19344,19348,19349,19351,19352,19354,19361,19363],{},"private void OnMenuItemClick(int position)\n{\n    base.FragmentManager.BeginTransaction().Replace(Resource.Id.frameLayout, _fragments",[4215,19330,19280],{},").Commit();\n    this.Title = _menuItems",[4215,19333,19280],{},";\n}\nOk, so running the sample now we have a drawer menu, and when an item is selected we use FragmentManager to swap out the frameLayout view with a fragment defined in the _fragments array.  As the application starts we want to set the first menu item selected and we want to show the respective fragment via",[1118,19336],{},"\n_drawerList.SetItemChecked(0, true); \u002F\u002Fhighlight the first item at startup\nOnMenuItemClick(0);",[1118,19339],{},"\nAfter the menu item is selected, we swap fragments and we will also close the drawer via\n_drawerLayout.CloseDrawer(_drawerList);",[1118,19342],{},"\nIf you review the screen captures above you will notice we do not yet have the hamburger menu.  We will do this by working with the ActionBar.  Using the class ",[1139,19345,19347],{"href":19346,"target":1142},"http:\u002F\u002Fdeveloper.xamarin.com\u002Fapi\u002Ftype\u002FAndroid.Support.V4.App.ActionBarDrawerToggle\u002F","ActionBarDrawerToggle"," we can tie together the functionality of DrawerLayout and the framework ActionBar to implement the recommended design for navigation drawers.",[1118,19350],{},"\nSo, I did have a few conflicts at this point which brings up Android.Support.V7.App vs. Android.Support.V4.App.  What is the difference? V4 supports library is designed to be used with Android 1.6 (API level 4) while V7 supports “libraries designed to be used with Android 2.1 (API level 7) and higher”  We will need to add via Nuget Xamarin.Android.Support.v7.AppCompat to reference ActionBarDrawerToggle.  i.e. Android.Support.V7.App.ActionBarDrawerToggle",[1118,19353],{},[1139,19355,19357],{"href":19356},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_8.png",[156,19358],{"style":15953,"src":19359,"border":8404,"alt":158,"title":158,"width":19360,"height":11860},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb_3.png",342,[1118,19362],{},"\nWithin v7 Support Library there are several libraries with a number of feature sets which can be included independently of each other.  For example within v7 we have v7 appcompat library, v7 cardview library, v7 gridlayout library etc.",[16,19365,19366,19367,19369,19370,19373,19374,14501,19376,19378,19379,19382,19383,19385,19386,14501,19388,19390,8422,19397,19404,19406,19407,19409,19410,19412,19413,19415,19416,19418],{},"\u002F\u002Fcreate an instance of actionbardrawertoggle           \n_drawerToggle = new ActionBarDrawerToggle(this, _drawerLayout, Resource.String.DrawerOpenDescription, Resource.String.DrawerCloseDescription);\n\u002F\u002Fset the actiondrawertoggle as the drawerlistener on the drawlayout so it recieves drawer state-change callbacks\n_drawerLayout.SetDrawerListener(_drawerToggle);\n\u002F\u002FMust up-enable the home button, the ActionBarDrawerToggle will change the icon to the \"hamburger\"\nActionBar.SetDisplayHomeAsUpEnabled(true);",[1118,19368],{},"\nBuilding the project I do have an issue….”",[19,19371,19372],{},"No resource identifier found for attribute ‘touchscreenBlocksFocus’ in the package ‘android’ ","After more than 1 hour of searching I came along the solution.  I had ‘Compile using Android version:’ API Level 19, Minimum Android to target: Use Compile using SDK Version, Target Android: ‘'Use Compile Using SDK Version.  In order to avoid this error I had to change my Target Android version to API Level 21 (Xamarin.Android v5.0 Support).",[1118,19375],{},[1118,19377],{},"\nSo that brings up the question\u002Fconcern, for Android applications you have the choices Compile Using, Minimum Android to target, and Target Android version.  So what is the difference here.  From ",[1139,19380,11036],{"href":19381,"target":1142},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F4568267\u002Fandroid-min-sdk-version-vs-target-sdk-version\u002F4994039#4994039"," a very good explanation (partial)\n”In short, here is the purpose to declaring a different targetSDK from the minSDK: It means you are using features from a higher level SDK than your minimum, but you have ensured backwards compatibility. In other words, imagine that you want to use a feature that was only recently introduced, but that isn't critical to your application. You would then set the targetSDK to the version where this new feature was introduced and the minimum to something lower so that everyone could still use your app.”",[1118,19384],{},"\nGetting back on track, we were hooking up the action bar to that of the drawer. Before we hook up this action bar drawer toggle we have this (left) notice there is no icon.  After we hook up the drawertoggle we have the \u003C icon.",[1118,19387],{},[1118,19389],{},[1139,19391,19393],{"href":19392},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_14.png",[156,19394],{"style":15953,"src":19395,"border":8404,"alt":158,"title":158,"width":19396,"height":8450},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb_6.png",150,[1139,19398,19400],{"href":19399},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_10.png",[156,19401],{"style":15953,"src":19402,"border":8404,"alt":158,"title":158,"width":19403,"height":13559},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarinandroiddrawerlayout_9d2d-image_thumb_4.png",152,[1118,19405],{},"\nNow when a user clicks on the > icon we want to forward all actionbar clicks to the ActionBarDrawerToggle.  We can do this with",[1118,19408],{},"\npublic override bool OnOptionsItemSelected(IMenuItem item)\n{\n    \u002F\u002F Forward all ActionBar-clicks to the ActionBarDrawerToggle.\n    \u002F\u002F It will verify the click was on the \"Home\" button (i.e. the button at the left edge of the ActionBar).\n    \u002F\u002F If so, it will toggle the state of the drawer. It will then return \"true\" so you know you do not need to do any more processing.\n    if (_drawerToggle.OnOptionsItemSelected(item))\n        return true;\n    \u002F\u002F Other cases go here for other buttons in the ActionBar.\n    \u002F\u002F This sample app has no other buttons. This code is a placeholder to show what would be needed if there were other buttons.\n    switch (item.ItemId)\n    {\n        default: break;\n    }    return base.OnOptionsItemSelected(item);\n}",[1118,19411],{},"\nThe final piece of this is ensuring that the hamburger is shown when the menu is closed.  In order to do this we need to sync the state of the drawer via the following method.  This will execute after your activities initialization is finished.  You need to tell the toggle button to synchronize its icon with the open\u002Fclosed state of the drawer.",[1118,19414],{},"\nprotected override void OnPostCreate(Bundle savedInstanceState)\n{\n    \u002F\u002F Initialization and any needed Restore operation are now complete.\n    \u002F\u002F Sync the state of the ActionBarDrawerToggle to the drawer (i.e. show the \"hamburger\" if the drawer is closed or an arrow if it is open).\n     _drawerToggle.SyncState();\n    base.OnPostCreate(savedInstanceState);\n}",[1118,19417],{},"\nIf you would like the sample code, please connect with me via email or twitter and I will send to you.",{"title":1080,"searchDepth":1081,"depth":1081,"links":19420},[],"2016-01-30T08:45:55.4700000-05:00","To add a navigation drawer, declare your user interface with a DrawerLayout object as the root view of your layout. Inside the DrawerLayout, add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of the navigation drawer.\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Candroid.support.v4.widget.DrawerLayout\nxmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\nandroid:id=\"@+id\u002FdrawerLayout\"\n   android:layout_width =\"match_parent\"\n    android:layout_height=\"match_parent\">\n  \u003C!-- Content -->\n  \u003CFrameLayout\n        android:id =\"@+id\u002FframeLayout\"\n        android:layout_width =\"match_parent\"\n        android:layout_height=\"match_parent\" \u002F>\n  \u003C!-- Navigation drawer menu -->\n  \u003CListView\n        android:id=\"@+id\u002FdrawerListView\"\n        android:layout_gravity=\"start\"\n        android:choiceMode    =\"singleChoice\"\n        android:layout_width  =\"240dp\"\n        android:layout_height =\"match_parent\"\n        android:background =\"?android:attr\u002FwindowBackground\" \u002F>\n\u003C\u002Fandroid.support.v4.widget.DrawerLayout>\nThe above layout uses a DrawerLayout with two child views: a FrameLayout to contain the main content which will be populated with a Fragment at runtime, and a ListView for the contents of the drawer.\nNow to the MainActivity.cs coding.. let’s get a reference to the drawerLayout = FindViewById\u003CDrawerLayout>(Resource.Id.drawerLayout);  You will find that DrawerLayout is not defined.  You need to add a reference via Nuget to Android Support Library v4.  Open Nuget and search for Xamarin.android.support.v4\nAndroid Support Libraries : The Android Support Libraries are a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs. Each Support Library is backward-compatible to a specific Android API level. This design means that your applications can use the libraries' features and still be compatible with devices running older versions of Android.  Including the Support Libraries in your Android project is considered a best practice for application developers.\nAdding a using statement for Android.Support.V4.Widget will complete the reference to DrawerLayout.\n_menuItems = new string { \"Welcome\", \"Options\", \"About\" };\n_drawerLayout = FindViewById\u003CDrawerLayout>(Resource.Id.drawerLayout);\n_drawerList = FindViewById\u003CListView>(Resource.Id.drawerListView);\n_drawerList.Adapter = new ArrayAdapter\u003Cstring>(this, Resource.Layout.ListViewMenuRow, Resource.Id.menuRowTextView, _menuItems);\nWe have a List which should be populated by an Adapter (ArrayAdapter or SimplerCursorAdaptor)\nAt this point we have (left) and if you swipe toward the right you see the menu. \nHooking up the menu click looks like..\n_drawerList.ItemClick += _drawerList_ItemClick;\nprivate void _drawerList_ItemClick(object sender, AdapterView.ItemClickEventArgs e)\n{\n    OnMenuItemClick(e.Position);\n}private void OnMenuItemClick(int position)\n{\n    this.Title = _menuItemsposition;\n}",{},"\u002Farticles\u002Fxamarin-android-drawerlayout",{"title":19185,"description":19422},"articles\u002Fxamarin-android-drawerlayout",[9200],"atMZSxAPcEHLtAMZGtRMESx9f019pOvMhwLgqyfRYSM",{"id":19430,"title":19431,"author":8,"body":19432,"createdAt":19475,"description":1915,"extension":1101,"img":19476,"meta":19477,"navigation":1104,"path":19478,"seo":19479,"stem":19480,"tags":19481,"updatedAt":19475,"__hash__":19482},"articles\u002Farticles\u002Fvisual-studio-2015-toolbox-items-missing.md","Visual Studio 2015 Toolbox Items missing",{"type":10,"value":19433,"toc":19473},[19434,19441,19458,19461,19466],[16,19435,19436,19437,19440],{},"Recently, I was using a 3rd party product that had toolbox items.  All was good after installation, then Visual Studio crashed,\nand my new toolbox items disappeared.  Restarting didn’t help.  I came across the following solution which\n",[19,19438,19439],{},"did ","solve my issue. To understand the cause of Toolbox issues and resolve them, perform the following steps:",[48,19442,19443,19446,19449,19452,19455],{},[51,19444,19445],{},"Open the \"%USERPROFILE%\\AppData\\Local\\Microsoft\\VisualStudio\\14.0\" folder and remove all .TBD files.",[51,19447,19448],{},"Run the Registry Editor (regedit.exe).",[51,19450,19451],{},"Locate the following keys:\n\"HKEY_CURRENT_USER\\Software\\Microsoft\\VisualStudio\\14.0\\ToolboxControlsInstaller_AssemblyFoldersExCache\"\n\"HKEY_CURRENT_USER\\Software\\Microsoft\\VisualStudio\\14.0\\ToolboxControlsInstallerCache\"",[51,19453,19454],{},"Remove these keys with their sub-keys.",[51,19456,19457],{},"Launch Visual Studio 2014 using the following command line:",[16,19459,19460],{},"In a 32-bit Windows:\n\"C:\\Program Files\\Microsoft Visual Studio 14.0\\Common7\\IDE\\devenv\" \u002FResetSkipPkgs \u002Flog \"\u003Cmy_folder>\\ActivityLog.xml\"\nIn a 64-bit Windows:\n\"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\devenv\" \u002FResetSkipPkgs \u002Flog \"\u003Cmy_folder>\\ActivityLog.xml\"",[48,19462,19463],{},[51,19464,19465],{},"Open Visual Studio – relaunch and hopefully all is good.",[1139,19467,19469],{"href":19468},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015toolbox-items-missing_e76b-toolbox_2.jpg",[156,19470],{"title":19471,"style":16154,"border":8404,"alt":19471,"src":19472,"width":8450,"height":8450},"toolbox","\u002Farticles\u002Fimageswindows-live-writer-visual-studio-2015toolbox-items-missing_e76b-toolbox_thumb.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":19474},[],"2016-01-20T12:29:49.0000000-05:00","\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015toolbox-items-missing_e76b-toolbox_thumb.jpg",{},"\u002Farticles\u002Fvisual-studio-2015-toolbox-items-missing",{"title":19431,"description":1915},"articles\u002Fvisual-studio-2015-toolbox-items-missing",[8526],"zdb7Iz7ZOc2BRjB-2JVcAt2ealuaketM1ImlOxRIVaU",{"id":19484,"title":19485,"author":8,"body":19486,"createdAt":19534,"description":1915,"extension":1101,"img":19529,"meta":19535,"navigation":1104,"path":19536,"seo":19537,"stem":19538,"tags":19539,"updatedAt":19534,"__hash__":19540},"articles\u002Farticles\u002Fpersonal-pc-backup-strategies-including-redundancy.md","Personal PC Backup–Strategies including redundancy",{"type":10,"value":19487,"toc":19532},[19488,19497,19500,19503,19506,19510,19513,19517,19520,19523],[16,19489,19490,19491,19493],{},"I use the following ‘backup’ tools and products for my personal use.  Yes, I do use 3 approaches as each has different benefits and advantages.",[1118,19492],{},[1139,19494,19496],{"href":19495,"target":1142},"https:\u002F\u002Ftechnet.microsoft.com\u002Fen-us\u002Flibrary\u002Fcc733145.aspx?f=255&MSPPError=-2147217396","RoboCopy",[13,19498,19499],{},"  \nThis is a Microsoft product that is already on your system for copying files between 2 locations.  Why use RoboCopy?  If you're conscientious about the safety of your data, chances are good that you are already using Windows 7's Backup and Restore tool to create an image file of your hard disk as well as to back up your data files on a regular schedule. However, you may like to have an additional copy of your data files just to be on the safe side. While you can easily do so by copying your files and folders to an external hard drive via drag and drop, that can be a tedious operation.  \n",[13,19501,19502],{},"  \nI use this product to backup my local files to an external harddrive.  I have created a batch file which when clicked will execute robocopy commands copying files between my pc and an external hard drive.  The hard drive came from an older pc that i have put in a cheap ($15) enclosure.  I can connect this device to my pc via usb cable.  The batch file resides on the external harddrive called robo_home.bat with the following contents… Below i am showing just 1 line of the file.  It provides the source and destination locations for what is to be copied to the external hard drive.  In fact I have multiple locations that i copy to the hard drive.  The external hard drive is 250gb plenty large enough to backup personal pictures\u002Fvideos etc.  \nrobocopy D:\\_Personal_A_L F:\\Home_PC\\_Personal_A_L   \u002Fmir \u002Fz \u002Fxa:sh \u002Fxjd \u002FR:5 \u002FW:15 \u002FMT:32 \u002Fv \u002Fnp \u002Flog:home_backup1.log  \n",[13,19504,19505],{},"  \nWhat does this do?  It copies files from the source D:\\_Personal to the destination F:\\Home_PC\\_Personal_A_F with a series of command arguments.  RoboCopy has numerous arguments that can be used to instruct how things will be copied.  The following are what i use.  \n\u002Fmir = I want to back up every folder in the source, even any empty folders, as they may be placeholders for future data. I also don't want to have files on the backup that I deleted from my hard disk  \n\u002FXA: SH = switch to exclude the hidden, system files  \n\u002FXD AppData = to exclude the entire AppData folder  \n\u002FXJD = exclude all the junction points  \n",[1139,19507,19509],{"href":19508,"target":1142},"https:\u002F\u002Fwww.dropbox.com\u002Fhome","DropBox",[13,19511,19512],{},"  \nDropbox is an online backup facility which stores your data on server using Cloud Storage so that you can share the files with other using file synchronization. The concept of Dropbox is that you can simply access your files anywhere and can be shared with others. The best part of Dropbox is its synchronization, Any files you save to Dropbox will also instantly reflect the same in your computers, Phones, iPad and Dropbox Websites.  \nI use a personal account, and the size limit is quite low 8 gb.  You can purchase a license to get more space and often they have promotions to get more space.  I use this product to make some files availalbe cross multiple devices and pcs.  Often I share Application settings files so that a product on one device will run with similar settings on another computer.  In addition, I use the folder share features to share files with friends and family.  \nI have installed this product on my phone which is really nice to access pictures taken on mobile devices.  After installing on a mobile device you will be walked through options to copy pictures automatically to your dropbox account.  So immediately after taking a picture the file(s) are available on my home pc.  Really nice.  For my family (wife and kids) i stress they use this product, for their school assignments\u002Fhome work etc.  If their laptops crash – they are safe.  Often they have used this product to access assignments from libraries or school systems, making their work available to them at all times. Very nice.  \n",[1139,19514,19516],{"href":19515,"target":1142},"http:\u002F\u002Fwww.code42.com\u002Fcrashplan\u002F","CrashPlan",[13,19518,19519],{},"  \nCrashPlan is a utility that allows you to back up your computer to another computer or to an external drive, either manually or on a schedule. If you have multiple computers in your household, you can back them up to one another, or you can back up to a friend's computer and invite them to do the same.  You can configure this app to create automatic backups once a day. And if you're a paid user, you'll benefit from continuous backups, so if something does go wrong, you can quickly pick up right where you left off.  \nThis is my fail safe backup system that is scheduled to run every evening.  Crashplan backups up unlimited amount of data\u002Ffiles to the cloud nightly.  The cost was ~$100 for 5 years which I find very reasonable to know that my home pc is backed in case of fire\u002Ftheft etc.  This is quite affordable in my opinion for the comfort of knowing things are backed up.  You can use this product like DropBox however I find DropBox is cross platform and free\u002Flow cost.  \n",[1139,19521],{"href":19522},"\u002Farticles\u002Fimages\u002Fopen-live-writer-backing-up-to_d663-backup_5.jpg",[16,19524,19525],{},[1139,19526,19527],{"href":19522},[156,19528],{"style":15953,"src":19529,"border":8404,"alt":19530,"title":19530,"width":19531,"height":14470},"\u002Farticles\u002Fimages\u002Fopen-live-writer-backing-up-to_d663-backup_thumb_1.jpg","backup",148,{"title":1080,"searchDepth":1081,"depth":1081,"links":19533},[],"2016-01-17T09:06:13.1300000-05:00",{},"\u002Farticles\u002Fpersonal-pc-backup-strategies-including-redundancy",{"title":19485,"description":1915},"articles\u002Fpersonal-pc-backup-strategies-including-redundancy",[4701],"bemS4swwtVbF4VqtdcWLrntTQBgmjprqf9NcPo4K-YU",{"id":19542,"title":19543,"author":8,"body":19544,"createdAt":19631,"description":1915,"extension":1101,"img":19578,"meta":19632,"navigation":1104,"path":19633,"seo":19634,"stem":19635,"tags":19636,"updatedAt":19631,"__hash__":19637},"articles\u002Farticles\u002Fxamarin-android-player-improving-performance.md","Xamarin Android Player Improving Performance",{"type":10,"value":19545,"toc":19629},[19546,19559,19570,19581,19592],[16,19547,19548,19549,19551,19552,1200,19556,19558],{},"Currently, using Windows 8.1 x64, Visual Studio 2015, Oracle VM VirtualBox Manager (Ver 5.0.4r102546)",[1118,19550],{},"\nWith Xamarin Android Player ",[1139,19553,19555],{"href":19554,"target":1142},"http:\u002F\u002Fdeveloper.xamarin.com\u002Fguides\u002Fandroid\u002Fgetting_started\u002Finstallation\u002Fandroid-player\u002F","installed",[1118,19557],{},"\nDisable Windows HyperV",[48,19560,19561,19564,19567],{},[51,19562,19563],{},"Programs and Features – Turn Windows features on and off",[51,19565,19566],{},"Expand Hyper-V",[51,19568,19569],{},"Uncheck it (may require windows restart)",[16,19571,19572,19573],{},"Start Oracle VM VirtualBox (select device), ",[1139,19574,19576],{"href":19575},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_10.png",[156,19577],{"style":18690,"src":19578,"border":8404,"alt":158,"title":158,"width":19579,"height":19580},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_thumb_4.png",93,96,[48,19582,19583,19586,19589],{},[51,19584,19585],{},"Right click – Settings",[51,19587,19588],{},"System – Acceleration – Hardware Virtualization – Enable VT-x\u002FAMD-V (Check On)",[51,19590,19591],{},"Display – Video Memory (increase from the default 1mb to 50mb)",[16,19593,8422,19594,19596,19597,14501,19599,14501,19601,19608,14501,19610,19612,19618,14501,19620,19622],{},[1118,19595],{},"\nFrom Xamarin also, the Xamarin Android Player emulated device will run significantly faster if your CPU supports hardware-assisted virtualization, and this is enabled in the BIOS. If your CPU supports this, please ensure it is enabled by booting your PC into the system BIOS, and checking for an option named \"Hardware virtualization”, \"VT-x”, \"AMD-V” or similar.",[1118,19598],{},[1118,19600],{},[1139,19602,19604],{"href":19603},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_2.png",[156,19605],{"style":18690,"src":19606,"border":8404,"alt":158,"title":158,"width":19607,"height":8473},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_thumb.png",177,[1118,19609],{},[1118,19611],{},[1139,19613,19615],{"href":19614},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_4.png",[156,19616],{"style":18690,"src":19617,"border":8404,"alt":158,"title":158,"width":8473,"height":12123},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_thumb_1.png",[1118,19619],{},[1118,19621],{},[1139,19623,19625],{"href":19624},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_6.png",[156,19626],{"style":18690,"src":19627,"border":8404,"alt":158,"title":158,"width":8473,"height":19628},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-xamarin-android-playerimproving-performa_e20e-image_thumb_2.png",163,{"title":1080,"searchDepth":1081,"depth":1081,"links":19630},[],"2016-01-15T09:19:49.0200000-05:00",{},"\u002Farticles\u002Fxamarin-android-player-improving-performance",{"title":19543,"description":1915},"articles\u002Fxamarin-android-player-improving-performance",[9200],"knCQH-0JchtNgJ4YV1noWWF56CORbMkCB5mhGHOaZd0",{"id":19639,"title":19640,"author":8,"body":19641,"createdAt":19695,"description":1915,"extension":1101,"img":19674,"meta":19696,"navigation":1104,"path":19697,"seo":19698,"stem":19699,"tags":19700,"updatedAt":19695,"__hash__":19701},"articles\u002Farticles\u002Fnet-roslyn-compiler-platform.md",".NET ‘Roslyn’ Compiler Platform",{"type":10,"value":19642,"toc":19693},[19643,19649,19652,19655,19658,19661,19664],[16,19644,19645,19646,19648],{},"Roslyn – is a recently released .NET Compiler Platform for .NET 4.6+   There is plenty of information on the web that describes this platform and where it can be utilized.\n.NET Compiler Platform, better known by its codename \"Roslyn\", is a set of open-source compilers and code analysis APIs for C# and Visual Basic .NET languages from Microsoft.",[1118,19647],{},"\nThe project notably includes self-hosting versions of the C# and VB.NET compilers – compilers written in the languages themselves.",[16,19650,19651],{},"The compilers are available via the\ntraditional command-line programs but also as APIs available natively from within .NET code. Roslyn exposes modules for syntactic (lexical) analysis of code, semantic analysis,\ndynamic compilation to CIL, and code emission.",[16,19653,19654],{},"Traditionally, compilers are black boxes -- source code goes in one end, magic happens in the middle, and object files or assemblies come out the other end. As compilers\nperform their magic, they build up deep understanding of the code they are processing, but that knowledge is unavailable to anyone but the compiler implementation wizards.\nThe information is promptly forgotten after the translated output is produced.",[16,19656,19657],{},"For decades, this world view has served us well, but it is no longer sufficient. Increasingly we rely on integrated development environment (IDE) features such as\nIntelliSense, refactoring, intelligent rename, “Find all references,” and “Go to definition” to increase our productivity. We rely on code analysis tools to improve our code\nquality and code generators to aid in application construction. As these tools get smarter, they need access to more and more of the deep code knowledge that only compilers\npossess.",[16,19659,19660],{},"This is the core mission of the .NET Compiler Platform (“Roslyn”): opening up the black boxes and allowing tools and end users to share in the wealth of information\ncompilers have about our code. Instead of being opaque source-code-in and object-code-out translators, through the .NET Compiler Platform (“Roslyn”), compilers become\nplatforms—APIs that you can use for code related tasks in your tools and applications.",[16,19662,19663],{},"The transition to compilers as platforms dramatically lowers the barrier to entry for creating code focused tools and applications. It creates many opportunities for\ninnovation in areas such as meta-programming, code generation and transformation, interactive use of the C# and VB languages, and embedding of C# and VB in domain specific\nlanguages.",[16,19665,19666,19667,14501,19669,19677,19679,19680,19682,19683,19687,19682,19689],{},"The .NET Compiler Platform (“Roslyn”) SDK Preview includes the latest drafts of new language object models for code generation, analysis, and refactoring. We hope to\ninclude drafts of API support for scripting and interactive use of C# and Visual Basic in a future preview. This document provides a conceptual overview of the .NET Compiler Platform (“Roslyn”). Further details can be found in the walkthroughs and samples included in the SDK Preview.",[1118,19668],{},[1139,19670,19672],{"href":19671},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-e08dc9d5742net-roslyn-compiler-platform_7627-ros_2.jpg",[156,19673],{"style":15953,"src":19674,"border":8404,"alt":19675,"title":19675,"width":8450,"height":19676},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-e08dc9d5742net-roslyn-compiler-platform_7627-ros_thumb.jpg","ros",120,[1118,19678],{},"\nReferences:",[1118,19681],{},"\n· ",[1139,19684,19686],{"href":19685},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Froslyn\u002Fwiki\u002FRoslyn%20Overview","Roslyn Overview",[1118,19688],{},[1139,19690,19692],{"href":19691},"http:\u002F\u002Fblogs.msdn.com\u002Fb\u002Fwebdev\u002Farchive\u002F2014\u002F05\u002F12\u002Fenabling-the-net-compiler-platform-roslyn-in-asp-net-applications.aspx","Enabling the .NET Compiler Platform (“Roslyn”) in ASP.NET applications",{"title":1080,"searchDepth":1081,"depth":1081,"links":19694},[],"2015-10-03T07:17:58.5900000-04:00",{},"\u002Farticles\u002Fnet-roslyn-compiler-platform",{"title":19640,"description":1915},"articles\u002Fnet-roslyn-compiler-platform",[10632],"VzDtwy5NenSIF7bhmLWeInVGvfQG8fSCLTHSz1axGDU",{"id":19703,"title":19704,"author":8,"body":19705,"createdAt":19843,"description":1915,"extension":1101,"img":19736,"meta":19844,"navigation":1104,"path":19845,"seo":19846,"stem":19847,"tags":19848,"updatedAt":19843,"__hash__":19849},"articles\u002Farticles\u002Fvisual-studio-2015-installing-remote-agent-on-a-mac.md","Visual Studio 2015–Installing Remote Agent on a Mac",{"type":10,"value":19706,"toc":19841},[19707,19710,19728,19738,19741,19751,19764,19775,19826],[16,19708,19709],{},"  Why….you need to install Remote Agent on a Mac in order to build\u002Fdeploy Visual Studio Apps that are targeted to the IOS environment.",[48,19711,19712,19715,19718,19721],{},[51,19713,19714],{},"Install Node on a Mac (see prior post)",[51,19716,19717],{},"To download and install remote agent, from a Terminal app on Mac type",[51,19719,19720],{},"sudo npm install –g npm  * sudo npm install –g remotebuild",[51,19722,19723,19724],{},"sudo npm install –g ios ",[1139,19725,19727],{"href":19726},"mailto:–sim@3.1.1","–sim@3.1.1",[13,19729,11776,19730],{},[1139,19731,19733],{"href":19732},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_2.png",[156,19734],{"title":158,"style":19735,"border":8404,"alt":158,"src":19736,"width":19737,"height":12984},"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: \n0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px","\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb.png",448,[16,19739,19740],{},"The first command updates npm, the second command installs the remote agent, and the third command is only required if you will be using the iOS Simulator\nfrom Visual Studio.",[16,19742,19743,19744,19747,19750],{},"Reference ",[1139,19745],{"title":19746,"href":19746},"https:\u002F\u002Fmsdn.microsoft.com\u002Flibrary\u002Fdn757054.aspx#ios",[1139,19748,19746],{"href":19746,"rel":19749},[3695],"    * To start the remote agent, from the Terminal app on your Mac type: remotebuild",[48,19752,19753,19761],{},[51,19754,19755,19756,19760],{},"this will start the agent with the default build directory ~\u002F.taco_home\u002Fremote_builds\u002Ftaco-remote\u002Fbuilds  * additional configurations\u002Foptions for the agent are described ",[1139,19757,19759],{"href":19758,"target":1142},"https:\u002F\u002Fmsdn.microsoft.com\u002Flibrary\u002Fdn771551%20(v=vs.140).aspx#IosConfig","Configure the remote agent"," * The first time you start the agent, you will be provided with\nthe required information to configure the agent in Visual Studio, including the host, the port, and the security PIN.",[51,19762,19763],{},"In fact, the first time\nI ran remote build, it asked me about installing Homebrew – I said continue, then I got a notification that Homebrew is already installed,\nI re-ran this time saying I didn’t want to continue with the install for Homebrew",[16,19765,19766,19774],{},[1139,19767,19769],{"href":19768,"target":1142},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_4.png",[156,19770],{"title":158,"style":14417,"border":8404,"alt":158,"src":19771,"width":19772,"height":19773},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb_1.png",344,136,"  ",[48,19776,19777,19793,19815,19818],{},[51,19778,19779,19780,11776,19782,19791],{},"For some reason, I did not get a security PIN for my Visual Studio configuration.  At this point, I ran the remotebuild –secure false (this will disable secure mode and enable http-based connections, choosing False as the Secure mode. ",[13,19781],{},[13,19783,11776,19784],{},[1139,19785,19787],{"href":19786,"target":1142},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_6.png",[156,19788],{"title":158,"style":14417,"border":8404,"alt":158,"src":19789,"width":19790,"height":11970},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb_2.png",333,[1118,19792],{},[51,19794,19795,19796,19774,19813],{},"Stopping the agent on the mac, Ctrl+C  * Running my first IOS Cordova application (from Visual Studio 2015) ",[13,19797,19798,19799,8422,19805],{},"   \n",[1139,19800,19802],{"href":19801,"target":1142},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_8.png",[156,19803],{"title":158,"style":14417,"border":8404,"alt":158,"src":19804,"width":12893,"height":13340},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb_3.png",[1139,19806,19808],{"href":19807,"target":1142},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_10.png",[156,19809],{"title":158,"style":14417,"border":8404,"alt":158,"src":19810,"width":19811,"height":19812},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb_4.png",192,352,[1118,19814],{},[51,19816,19817],{},"While this worked, I wanted to revisit the issue about my missing Security PIN",[51,19819,19820,19821,19825],{},"To ",[1139,19822,19824],{"href":19823,"target":1142},"https:\u002F\u002Fmsdn.microsoft.com\u002Flibrary\u002Fdn771551%20(v=vs.140).aspx#IosPin","generate"," a new security PIN, type remote build generateClientCert  * Doing this I was able to get my Security PIN, enter it within Visual Studio and all things",[16,19827,19828,19835,19836,19838],{},[1139,19829,19831],{"href":19830},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_12.png",[156,19832],{"title":158,"style":14417,"border":8404,"alt":158,"src":19833,"width":18958,"height":19834},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-visual-studio-2015install-remote-agent-o_e784-image_thumb_5.png",268,"         ",[1139,19837],{"title":19746,"href":19746},[1139,19839,19746],{"href":19746,"rel":19840},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":19842},[],"2015-08-12T10:48:58.1300000-04:00",{},"\u002Farticles\u002Fvisual-studio-2015-installing-remote-agent-on-a-mac",{"title":19704,"description":1915},"articles\u002Fvisual-studio-2015-installing-remote-agent-on-a-mac",[8526],"NQN3PYuMPvYD-UZPG66fDRCJTeDwodVXQmx5fbhj0pE",{"id":19851,"title":19852,"author":8,"body":19853,"createdAt":19951,"description":19952,"extension":1101,"img":19912,"meta":19953,"navigation":1104,"path":19954,"seo":19955,"stem":19956,"tags":19957,"updatedAt":19951,"__hash__":19959},"articles\u002Farticles\u002Finstalling-node-js-on-a-mac.md","Installing Node.js on a Mac",{"type":10,"value":19854,"toc":19947},[19855,19859,19862,19866,19905,19913,19944],[24,19856,19858],{"id":19857},"setting-up-nodejs-on-mac-for-cordovaphonegap-development","Setting Up Node.js on Mac for Cordova\u002FPhonegap Development",[16,19860,19861],{},"I recently found myself exploring new Cordova\u002FPhonegap options within Visual Studio 2015. As part of the setup process, I needed to install Node.js. This blog post will guide you through the installation process and set the stage for the next tutorial, where we'll get a Hybrid\u002FJavaScript application running on the iOS simulator.",[24,19863,19865],{"id":19864},"installing-nodejs-with-homebrew","Installing Node.js with Homebrew",[2652,19867,19868,19871],{},[51,19869,19870],{},"Open Terminal from the Finder application.",[51,19872,19873,19874,19879,19880],{},"Install ",[1139,19875,19878],{"href":19876,"rel":19877},"http:\u002F\u002Fbrew.sh\u002F",[3695],"Homebrew"," using the following command:",[2232,19881,19883],{"className":4657,"code":19882,"language":4659,"meta":1080,"style":1080},"ruby -e \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002Fmaster\u002Finstall)\"\n",[2239,19884,19885],{"__ignoreMap":1080},[4215,19886,19887,19890,19893,19896,19899,19902],{"class":4217,"line":4218},[4215,19888,19889],{"class":4666},"ruby",[4215,19891,19892],{"class":8255}," -e",[4215,19894,19895],{"class":4669}," \"$(",[4215,19897,19898],{"class":4666},"curl",[4215,19900,19901],{"class":8255}," -fsSL",[4215,19903,19904],{"class":4669}," https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002Fmaster\u002Finstall)\"\n",[16,19906,19907],{},[1139,19908,19910],{"href":19909,"target":1142},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-593d533b5cf5_e4a7-image_6.png",[156,19911],{"title":158,"style":16154,"border":8404,"alt":158,"src":19912,"width":14494,"height":13519},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-593d533b5cf5_e4a7-image_thumb_2.png",[2652,19914,19915,19934],{},[51,19916,19917,19918],{},"Once Homebrew is installed, you can easily get Node.js by typing the following command in the Terminal window:",[2232,19919,19921],{"className":4657,"code":19920,"language":4659,"meta":1080,"style":1080},"brew install node\n",[2239,19922,19923],{"__ignoreMap":1080},[4215,19924,19925,19928,19931],{"class":4217,"line":4218},[4215,19926,19927],{"class":4666},"brew",[4215,19929,19930],{"class":4669}," install",[4215,19932,19933],{"class":4669}," node\n",[51,19935,19936,19937,19939,19940],{},"Verify Your Node.js Installation",[1118,19938],{},"For information about running Node.js, you can check out this How To Node resource: ",[1139,19941,19942],{"href":19942,"rel":19943},"http:\u002F\u002Fhowtonode.org\u002Fhello-node",[3695],[4682,19945,19946],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":19948},[19949,19950],{"id":19857,"depth":1084,"text":19858},{"id":19864,"depth":1084,"text":19865},"2015-08-12","Learn how to set up Node.js on your Mac for Cordova\u002FPhonegap development. This step-by-step guide covers the installation process using Homebrew, a package manager for macOS. Discover why Node.js is essential for building Hybrid\u002FJavaScript applications within Visual Studio 2015, and follow along as we install Node.js and prepare for the next tutorial, where we'll get a Hybrid\u002FJavaScript application running on the iOS simulator. Whether you're new to Node.js or looking for a quick refresher, this article provides clear instructions and valuable resources for a smooth setup. Start your journey into Node.js development on Mac today!",{},"\u002Farticles\u002Finstalling-node-js-on-a-mac",{"title":19852,"description":19952},"articles\u002Finstalling-node-js-on-a-mac",[19958],"apple","BABFo9yiTOA-YMMm5pqJtUbkH8f9uC5sevDrF7-CxwM",{"id":19961,"title":19962,"author":8,"body":19963,"createdAt":20044,"description":20045,"extension":1101,"img":20039,"meta":20046,"navigation":1104,"path":20047,"seo":20048,"stem":20049,"tags":20050,"updatedAt":20044,"__hash__":20051},"articles\u002Farticles\u002Fvarchar-vs-nvarchar.md","Varchar vs NVarchar",{"type":10,"value":19964,"toc":20042},[19965,19982,19991,20013],[16,19966,19967,19968,19970,19971,19974,19975,19978,19979,19981],{},"So let’s talk about this to better understand some differences and benefits of using each of these data types.",[1118,19969],{},"\nNVarchar – the ‘N’ in varchar means u",[19,19972,19973],{},"N","icode",[19,19976,19977],{},".  ","The column can store any Unicode data.  The column is a varchar that supports two-byte\ncharacters.  The most common use for this sort of thing is to store character data that is a mixture of English and non-English symbols.",[1118,19980],{},"\nVarchar – is an abbreviation for variable-length character string. ",[16,19983,19984,19985,19987,19990],{},"It’s a string of text characters that can be as large as the page size for the database table holding the column.  The size for a table page is 8,196 bytes, and no one\nrow in a table can be more than 8060 characters.  This in turn limits the maximum size of a varchar to 8000 bytes.",[1118,19986],{},[19,19988,19989],{},"So we used the term unicode data",".  What does this mean?  Computers store letters and other characters by assigning a number for each one. ",[16,19992,19993,19994,19997,19998,20000,20003,20004,20006,20009,20010,20012],{},"Before unicode was invented there were hundreds of different encoding systems for assigning these numbers. No single encoding could contain enough characters: for example,\nthe European Union alone requires several different encodings to cover all its languages. Even for a single language like English no single encoding was adequate for all the\nletters, punctuation, and technical symbols in common use. These encoding systems also conflict with another, for instance two encodings could use the same number for two\ndifferent characters. ",[19,19995,19996],{},"Unicode ","to the rescue.  Unicode provides a unique number for every character, no matter what the platform, no matter what the program,\nno matter what the language.  The unicode standard has widespread adoption across systems, platforms, languages etc.  It solves most of the encoding issues.",[1118,19999],{},[19,20001,20002],{},"The primary difference between these two column types is how they are stored.","  Varchar is stored as 8-bit data.  Nvarchar strings are stored in the\ndatabase as UTF-16, 16 bits or two bytes per character, and converted on output (typically UTF-8).  That said, Nvarchar strings have the same length restrictions as varchar\n8000 bytes.  Since Nvarchar use two bytes instead of one nvarchar can only hold 4000 characters maximum.",[1118,20005],{},[19,20007,20008],{},"What is UTF-8 and UTF-16?","   UTF stands for Unicode Transformation Format.  It is a family of standards for encoding the Unicode character set into\nits equivalent binary value.  UTF was developed so that users have a standardized means of encoding the characters with the minimal amount of space.UTF-8 and UTF 16 are\nonly two of the established standards for encoding.  The main advantage of UTF-8 is that it is backwards compatible with ASCII. The ASCII character set is fixed width and\nonly uses one byte.  When encoding a file that uses only ASCII characters with UTF-8, the resulting file would be identical to a file encoded with ASCII. This is not\npossible when using UTF-16 as each character would be two bytes long.",[1118,20011],{},"\nOkay, we have covered a few technical topics here. ",[16,20014,20015,20016,20019,20020,20023,20024,20026,20027,20030,20031,20033],{},"So in the end you can store more string data in a varchar than nvarchar fields, however if you are working with multiple cultures, languages etc.\nyou will ",[19,20017,20018],{},"NEED ","to store those character sets in fields that are of type ",[19,20021,20022],{},"NVARCHAR",".  Due to the widespread usage of web applications\naround the globe I believe you will rarely go wrong by selecting\u002Fusing nvarchar over varchar. If you are concerned about storage space you can use a combination of field\ntypes (using nvarchar for user-entered data and varchar for system generated) but this may just add complexity and one day just be a limitation\u002Fhurdle you will need to\novercome in the future when globalizing your application.",[1118,20025],{},"\nJust use ",[19,20028,20029],{},"nvarchar"," and you will be safe.",[1118,20032],{},[1139,20034,20036],{"href":20035},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-varchar-vs-nvarchar_11973-choice2_4.png",[156,20037],{"style":20038,"src":20039,"border":8404,"alt":20040,"title":20040,"width":8450,"height":20041},"background-image: none; padding-top: 0px; padding-left: 0px; \ndisplay: inline; padding-right: 0px; border: 0px;","\u002Farticles\u002Fimages\u002Fwindows-live-writer-varchar-vs-nvarchar_11973-choice2_thumb_1.png","choice2",143,{"title":1080,"searchDepth":1081,"depth":1081,"links":20043},[],"2015-06-26T09:36:26.9300000-04:00","Let’s talk about this to better understand some differences and benefits of using each.",{},"\u002Farticles\u002Fvarchar-vs-nvarchar",{"title":19962,"description":20045},"articles\u002Fvarchar-vs-nvarchar",[8743],"SXeJ9MvXofV764d8HuiIQXhx1ejjfpqsDzHGIdBnfls",{"id":20053,"title":20054,"author":8,"body":20055,"createdAt":20173,"description":1915,"extension":1101,"img":20174,"meta":20175,"navigation":1104,"path":20176,"seo":20177,"stem":20178,"tags":20179,"updatedAt":20173,"__hash__":20180},"articles\u002Farticles\u002Fnet-releases-versions-in-2015.md",".NET Releases & Versions in 2015",{"type":10,"value":20056,"toc":20171},[20057,20079,20114,20129,20132,20140,20151,20155,20163],[16,20058,20059,20060,20062,20063,20066,20067,20070,20071,20073,20075,20078],{},"In 2015 we will have new releases of .NET Framework, ASP.NET versions, Web Forms, MVC versions.  That is quite a bit to keep track of.  This should make it a little easier.  I am surprised that Microsoft has not made it more clear as to what is included in which version.  They recently starting calling this bundle .NET 2015 and as a bundle includes a number of sub-products.",[1118,20061],{},"\nSo starting with the ",[19,20064,20065],{},".NET 2015 ","Bundle….it includes ",[19,20068,20069],{},".NET 4.6"," AND ",[19,20072,11904],{},[1118,20074],{},[19,20076,20077],{},".NET 4.6 and .NET Core ","includes..(.NET 4.6 is included with Visual Studio 2015)",[48,20080,20081,20088,20091,20096,20099,20102,20105,20108,20111],{},[51,20082,20083,20087],{},[1139,20084,20086],{"href":20085},"http:\u002F\u002Fblogs.msdn.com\u002Fb\u002Fwebdev\u002Farchive\u002F2015\u002F02\u002F09\u002Fasp-net-mvc-5-2-3-web-pages-3-2-3-and-web-api-5-2-3-release.aspx","ASP.NET 4.6","  is an umbrella term used to describe updates to existing frameworks such as ASP.NET Web Forms\u002FMVC 5\u002FWeb Api 2.",[51,20089,20090],{},"ASP.NET Web Forms 46",[51,20092,20093,20094],{},"ASP.NET MVC 5.2.3 – updates to MVC 5 found ",[1139,20095,8578],{"href":20085},[51,20097,20098],{},"ASP.NET Web Pages 3.2.3",[51,20100,20101],{},"ASP.NET Web API 5.2.3",[51,20103,20104],{},"ASP.NET SignalR 2.1.2",[51,20106,20107],{},"ASP.NET 5.0 Beta 5 (vNext)  – a .NET platform for build cloud-based apps and can be hosted on IIS or self-hosted in a custom process.  It supports running on both the .NET Framework and .NET Core so by extension supports running on Windows, Linux, OS X etc.",[51,20109,20110],{},"MVC 6.0 - MVC, Web API, and Web Pages are unified into a single framework – this is a complete rewrite of MVC engine we use today, while we still have controllers, views and models under the hood MVC 6 is an improved and rewritten engine.  Web API is now fully integrated with MVC 6",[51,20112,20113],{},"C# 6, F# 4, VB 14",[16,20115,20116,20117,20121,20123,20126,20128],{},"Note: .NET 4.6 is an in-place update to versions .NET 4, 4.5, 4.5.1, 4.5.2 > this means that after installation c:\\windows\\Microsoft.NET\\Framework(bitness)\\v4.0.30319 will be updated with the latest dlls, this is similar to how .NET 3.5 was an in-place update to .NET 2.0.  See also ",[1139,20118,20120],{"href":20119},"https:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fbb822049(v=vs.110).aspx",".NET Framework Versions and Dependencies",[1118,20122],{},[19,20124,20125],{},"\nToday (August 2015) ",[1118,20127],{},"\nSO if you are building an application today you can open Visual Studio 2015 and create new project(s) – web project – selecting .NET 4.6 and ASP.NET 4.6 templates (empty, web forms, mvc, etc.).  However, if you wanting to try out new ASP.NET 5 preview templates those are available too (i.e. choose .NET 4.6 and ASP.NET 5 (Preview) templates such as empty, web api and web application)",[16,20130,20131],{},"Also if you have not installed .NET 4.6 on the server you would choose to create a new project you could select .NET 4.5.2 and respective ASP.NET 4.5.2 web templates (empty, web forms, mvc, etc.)",[16,20133,20134,20135,20137],{},"Note here that Microsoft released Visual Studio 2015 with updates to existing frameworks as well as preview releases of ASP.NET and Entity Framework 7.  So confusing.",[1118,20136],{},[19,20138,20139],{},"\nVisual Studio 2015 – Updates",[48,20141,20142,20145,20148],{},[51,20143,20144],{},"JSON Editor",[51,20146,20147],{},"HTML Editor Updates",[51,20149,20150],{},"JavaScript Editor Improvements",[16,20152,20153],{},[19,20154,7503],{},[48,20156,20157],{},[51,20158,20159],{},[1139,20160,20162],{"href":20161},"http:\u002F\u002Fblogs.msdn.com\u002Fb\u002Fdotnet\u002Fp\u002Fdotnet_sdks.aspx?source=VS2013",".NET SDKs and Downloads",[16,20164,20165],{},[1139,20166,20168],{"href":20167},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-f6d15fa95net-releases-versions-in-2015_11a94-version_4.png",[156,20169],{"style":8402,"src":20170,"border":8404,"alt":11894,"title":11894,"width":8450,"height":20041},"\u002Farticles\u002Fimageswindows-live-writer-f6d15fa95net-releases-versions-in-2015_11a94-version_thumb_1.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":20172},[],"2015-06-16T16:09:46.7300000-04:00","\u002Farticles\u002Fimages\u002Fwindows-live-writer-f6d15fa95net-releases-versions-in-2015_11a94-version_thumb_1.png",{},"\u002Farticles\u002Fnet-releases-versions-in-2015",{"title":20054,"description":1915},"articles\u002Fnet-releases-versions-in-2015",[8994,10632],"RihqeLfTiAz21FdMOWIpdgYXNEmdlz_YWHgD_XX1Zf0",{"id":20182,"title":20183,"author":8,"body":20184,"createdAt":20229,"description":1915,"extension":1101,"img":1915,"meta":20230,"navigation":1104,"path":20231,"seo":20232,"stem":20233,"tags":20234,"updatedAt":20229,"__hash__":20235},"articles\u002Farticles\u002Fsql-templates-in-sql-server-management-studio.md","SQL Templates (in SQL Server Management Studio)",{"type":10,"value":20185,"toc":20227},[20186,20202,20216],[16,20187,20188,20189,10888,20193,20197,20198,20200],{},"Credit goes to the ",[1139,20190,20192],{"target":1142,"href":20191},"http:\u002F\u002Fcincysql.org\u002Fdefault.aspx","Cincinnati SQL Server User’s Group",[1139,20194,20196],{"target":1142,"href":20195},"http:\u002F\u002Fjapikse.blogspot.com","Phil Japikse"," for the following tip.  Two things of interest in this post.  Ability to create Sql Templates within SQL Server Management Studio and SQL to find objects named like ‘%here%’ across all objects in a database.",[1118,20199],{},[1128,20201],{},[1128,20203,20204,20207,20210,20213],{},[16,20205,20206],{},"USE \u003Cdatabasename,string,@p1>",[16,20208,20209],{},"GO",[16,20211,20212],{},"SELECT OBJECT_NAME(OBJECT_ID)",[16,20214,20215],{},"FROM sys.sql_modules",[16,20217,20218,8422,20221,20223,20224,20226],{},[1128,20219,20220],{},"WHERE definition like '%\u003Cstring_to_find,string,@p2>%'",[1118,20222],{},"\nNow that you have the SQL it is possible to create a SQL Template (View – SQL Templates) whereby you can simply select and push Ctrl-Shift-M for variable substitution.  Within the Template Window create a new folder to store your custom templates, create a new template, paste the above SQL and Save.  To use simply click on the template and Ctrl-Shift-M to be prompted for the variables and values.",[1118,20225],{},"\nGreat stuff.  Thanks guys for the tip.",{"title":1080,"searchDepth":1081,"depth":1081,"links":20228},[],"2015-04-20T08:07:20.1800000-04:00",{},"\u002Farticles\u002Fsql-templates-in-sql-server-management-studio",{"title":20183,"description":1915},"articles\u002Fsql-templates-in-sql-server-management-studio",[8743],"xLkaxTvrpsg5-vSPzWpJsrPkpM6cQ_XYQ7P2nrTpJS8",{"id":20237,"title":20238,"author":8,"body":20239,"createdAt":20256,"description":20257,"extension":1101,"img":20253,"meta":20258,"navigation":1104,"path":20259,"seo":20260,"stem":20261,"tags":20262,"updatedAt":20256,"__hash__":20264},"articles\u002Farticles\u002Flinq-samples-provided-by-msdn-microsoft.md","Linq Samples Provided by MSDN Microsoft",{"type":10,"value":20240,"toc":20254},[20241,20244],[16,20242,20243],{},"In fact Microsoft has provided 101 of them.  How much do you wanna bet they are missing the one you are looking for?  (always 1 short).",[16,20245,20246,20247,20251],{},"  Check it out here on ",[1139,20248,20250],{"target":1142,"href":20249},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Fvcsharp\u002Faa336746.aspx","MSDN",[156,20252],{"src":20253,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Flinq.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":20255},[],"2015-04-20T08:07:20.0600000-04:00","101 Linq samples",{},"\u002Farticles\u002Flinq-samples-provided-by-msdn-microsoft",{"title":20238,"description":20257},"articles\u002Flinq-samples-provided-by-msdn-microsoft",[20263],"linq","sxrSHppiVktSvHxvkWPtSSC_uGcviIO8d0WvutVopls",{"id":20266,"title":20267,"author":8,"body":20268,"createdAt":20291,"description":1915,"extension":1101,"img":20292,"meta":20293,"navigation":1104,"path":20294,"seo":20295,"stem":20296,"tags":20297,"updatedAt":20291,"__hash__":20298},"articles\u002Farticles\u002Fwindows-vista-wallpapers-nice-collection.md","Windows Vista Wallpapers - Nice collection",{"type":10,"value":20269,"toc":20289},[20270],[16,20271,20272,20273,20277,20278,20280,20286],{},"I came across this ",[1139,20274,20276],{"href":20275,"target":1142},"http:\u002F\u002Fwww.vista4beginners.com\u002FVista-Wallpapers-Collection","site"," this afternoon. \nA number of beautiful photos by Harmad Darwish.  Harmad was hired by Microsoft to work on wallpaper collections for Vista.",[1118,20279],{},[1139,20281,20282],{"href":20275,"target":1142},[156,20283],{"title":158,"style":20284,"height":8473,"alt":158,"src":20285,"width":8473,"border":8404},"border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px","\u002Fimages\u002FWindowsVistaWallpapersNicecollection_12B96\u002Fimage_3.png",[156,20287],{"src":20288,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fvista.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":20290},[],"2015-04-20T08:07:19.9500000-04:00","\u002Farticles\u002Fimages\u002Fimage_3.png",{},"\u002Farticles\u002Fwindows-vista-wallpapers-nice-collection",{"title":20267,"description":1915},"articles\u002Fwindows-vista-wallpapers-nice-collection",[4701],"yMgZ1h8ePVrQxDCz7xeoOynQE98wpvA6j3hLSVSqShw",{"id":20300,"title":20301,"author":8,"body":20302,"createdAt":20316,"description":1915,"extension":1101,"img":1915,"meta":20317,"navigation":1104,"path":20318,"seo":20319,"stem":20320,"tags":20321,"updatedAt":20316,"__hash__":20322},"articles\u002Farticles\u002Fweb-site-complete-content-missing.md","Web Site Complete Content Missing",{"type":10,"value":20303,"toc":20314},[20304,20307],[16,20305,20306],{},"Ever have trouble getting content for web projects. ",[16,20308,20309,20310,1200],{},"Pepi Ronalds wrote up a very nice article describing the pains related to getting content (type) for web related projects. \nCheck it out\n",[1139,20311,20313],{"target":1142,"href":20312},"http:\u002F\u002Fwww.alistapart.com\u002Farticles\u002Fthecureforcontent-delaysyndrome","here\n",{"title":1080,"searchDepth":1081,"depth":1081,"links":20315},[],"2015-04-20T08:07:19.7300000-04:00",{},"\u002Farticles\u002Fweb-site-complete-content-missing",{"title":20301,"description":1915},"articles\u002Fweb-site-complete-content-missing",[8526],"g178fE7iFZl7UCOBlxQgNpfuz8JoGtoRZGftxYd1X7w",{"id":20324,"title":20325,"author":8,"body":20326,"createdAt":20371,"description":1915,"extension":1101,"img":1915,"meta":20372,"navigation":1104,"path":20373,"seo":20374,"stem":20375,"tags":20376,"updatedAt":20371,"__hash__":20378},"articles\u002Farticles\u002Fone-hundred-pushups-ndash-oh-ya-for-real.md","One Hundred Pushups oh ya for real",{"type":10,"value":20327,"toc":20369},[20328,20331,20339,20352,20360,20366],[16,20329,20330],{},"Back from vacation and back into the routine of work, and I am ready to get in shape.  City living and a developers' lifestyle has left my body in rough shape.",[16,20332,20333,20334,20338],{},"My wife and I recently invested in some home exercise\n",[1139,20335,20337],{"href":20336,"target":1142},"http:\u002F\u002Fwww.soletreadmills.com\u002Fdetails.php?name=E55&product_type=ellipticals","equipment",", and I assembled it today. ",[16,20340,20341,20342,20346,20347,20351],{},"I was scanning some blogs this evening and came across a couple of other individuals in similar modes.  ",[1139,20343,20345],{"href":20344,"target":1142},"http:\u002F\u002Fblog.wekeroad.com\u002Fblog\u002Fone-hundred-pushups-twitter-challenge\u002F","Rob Conery"," posted about the ",[1139,20348,20350],{"href":20349,"target":1142},"http:\u002F\u002Fhundredpushups.com\u002Findex.html","onehundredpushups"," ‘program’ and thought this is good timing.",[16,20353,20354,20355,20359],{},"So my goal is to do my time (2 – 30-minute sessions) on our home equipment daily as well as the 100 pushup plan.  I did the initial test and with sore arms I'm completing this post.  For my friends out there, if you also get involved and do the program with me (and complete it) I will buy and have delivered your choice of ",[1139,20356,20358],{"href":20357,"target":1142},"http:\u002F\u002Fhundredpushups.com\u002Fmerchandise.html","merchandise"," from their site. ",[16,20361,20362,20363,1200],{},"Let me know if this sounds too good. I am ",[19,20364,20365],{},"serious",[16,20367,20368],{},"I start day 1 tomorrow.  Let me know if you like my offer.",{"title":1080,"searchDepth":1081,"depth":1081,"links":20370},[],"2015-04-20T08:07:19.3500000-04:00",{},"\u002Farticles\u002Fone-hundred-pushups-ndash-oh-ya-for-real",{"title":20325,"description":1915},"articles\u002Fone-hundred-pushups-ndash-oh-ya-for-real",[20377],"general","Nh1uo3hIQOlVxHZAK-2sTb67Xuq73LSRwDX-kD0gaKY",{"id":20380,"title":20381,"author":8,"body":20382,"createdAt":20419,"description":20420,"extension":1101,"img":20421,"meta":20422,"navigation":1104,"path":20423,"seo":20424,"stem":20425,"tags":20426,"updatedAt":20419,"__hash__":20427},"articles\u002Farticles\u002Feveryday-i-learn-string-trim-vs-trimstring.md","Everyday I Learn - String.Trim vs Trim(string)",{"type":10,"value":20383,"toc":20417},[20384,20387,20390,20393,20396,20408,20411,20414],[16,20385,20386],{},"String.Trim method - Removes all occurrences of white space characters from the beginning and end of this instance.",[16,20388,20389],{},"Trim(var) method - returns a string with no leading or trailing spaces",[16,20391,20392],{},"Yes, there is a difference between these.  The String.Trim will remove any non-visible characters such as line feeds and carriage returns.",[16,20394,20395],{},"How I came across this was as a result of an odd exception I am getting from an application.  Randomly the NameValueCollection after a postback will have an appended or prepended line feed.",[16,20397,20398,20399,20401,20402,20404,20405,20407],{},"i.e.",[1118,20400],{},"\nhidCustomerID: -1",[1118,20403],{},"\nhidCustomerNo: 0",[1118,20406],{},"\nhidCurrent: True    hidOrderID: -1",[16,20409,20410],{},"When the code behind tries to ctype(hidCurrent, Boolean) it recieves True or False with additional hidden line feeds.",[16,20412,20413],{},"This is within an ASP.NET 2.x web application.  I have yet to find the source of this problem but I am hoping the String.Trim() will help me out here.",[16,20415,20416],{},"If you have any ideas please let me know what may be going on here.",{"title":1080,"searchDepth":1081,"depth":1081,"links":20418},[],"2015-04-20T08:07:19.2000000-04:00","Learn something everyday","\u002Farticles\u002Fimages\u002Fu1gRsGzBFH.png",{},"\u002Farticles\u002Feveryday-i-learn-string-trim-vs-trimstring",{"title":20381,"description":20420},"articles\u002Feveryday-i-learn-string-trim-vs-trimstring",[8723],"dyD86vhVOaZMdPRBPmlEH1iZtcKlN5GvmNPHl8_FRWg",{"id":20429,"title":20430,"author":8,"body":20431,"createdAt":20479,"description":20480,"extension":1101,"img":20481,"meta":20482,"navigation":1104,"path":20483,"seo":20484,"stem":20485,"tags":20486,"updatedAt":20479,"__hash__":20487},"articles\u002Farticles\u002F75-really-useful-javascript-techniques-more.md","75 (Really) Useful JavaScript Techniques +More",{"type":10,"value":20432,"toc":20477},[20433,20436,20444,20450,20456,20462,20468,20474],[16,20434,20435],{},"A really nice collection of JavaScript tools and scripts can be found here",[16,20437,20438,20441],{},[1139,20439],{"title":20440,"href":20440},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2008\u002F09\u002F11\u002F75-really-useful-javascript-techniques\u002F",[1139,20442,20440],{"href":20440,"rel":20443},[3695],[16,20445,20446],{},[1139,20447,20449],{"href":20448},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2007\u002F06\u002F20\u002Fajax-javascript-solutions-for-professional-coding\u002F","80+ AJAX-Solutions For Professional Coding",[16,20451,20452],{},[1139,20453,20455],{"href":20454},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2008\u002F04\u002F15\u002F60-more-ajax-and-javascript-solutions-for-professional-coding\u002F","60 More AJAX- and Javascript Solutions For Professional Coding",[16,20457,20458],{},[1139,20459,20461],{"href":20460},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2007\u002F05\u002F18\u002F30-best-solutions-for-image-galleries-slideshows-lightboxes\u002F","30 Scripts For Galleries, Slideshows and Lightboxes",[16,20463,20464],{},[1139,20465,20467],{"href":20466},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2007\u002F06\u002F12\u002Ftooltips-scripts-ajax-javascript-css-dhtml\u002F","40+ Tooltips Scripts With AJAX, JavaScript & CSS",[16,20469,20470],{},[1139,20471,20473],{"href":20472},"http:\u002F\u002Fwww.smashingmagazine.com\u002F2007\u002F05\u002F30\u002Ftables-and-data-grids-with-ajax-dhtml-javascript\u002F","Data Grids with AJAX, DHTML and JavaScript",[16,20475,20476],{},"All these resources are very good and certainly something here for everyone.",{"title":1080,"searchDepth":1081,"depth":1081,"links":20478},[],"2015-04-20T08:07:19.0000000-04:00","A really nice collection of JavaScript tools and scripts can be found here.","\u002Farticles\u002Fimages\u002F28QUDU0HYd.png",{},"\u002Farticles\u002F75-really-useful-javascript-techniques-more",{"title":20430,"description":20480},"articles\u002F75-really-useful-javascript-techniques-more",[5166],"0sO-yyldLtzjQCHlwmXdN-AiCLoCZv1PxMvU0AsKUkM",{"id":20489,"title":20490,"author":8,"body":20491,"createdAt":20563,"description":20564,"extension":1101,"img":1915,"meta":20565,"navigation":1104,"path":20566,"seo":20567,"stem":20568,"tags":20569,"updatedAt":20563,"__hash__":20570},"articles\u002Farticles\u002Fweb-site-to-do-and-not-to-do-s.md","Web Site (to do and not todos)",{"type":10,"value":20492,"toc":20561},[20493,20501,20504,20558],[16,20494,20495,20496,20500],{},"I read this post by ",[1139,20497,20499],{"href":20498,"target":1142},"---------------------------","Josiah Cole"," and have to provide this abbreviated list and less sarcastic version of things to do when designing a web site.",[16,20502,20503],{},"Do not resize the user’s browser window ever.",[16,20505,20506,20507,20509,20510,20512,20513,20515,20516,20518,20519,20521,20522,20524,20525,20527,20528,20530,20531,20533,20534,20536,20537,20539,20540,20542,20543,20545,20546,20548,20549,20551,20552,20554,20555,20557],{},"If your web site does not immediately load on your home page and deliver your message within a couple of second’s your site needs redesign.",[1118,20508],{},"\nNever ask your customer which version they want to visit (high\u002Flow bandwidth etc.)",[1118,20511],{},"\nNever develop a web site entirely in Flash.",[1118,20514],{},"\nDo not reinvent the website navigation. Put the navigation along the top, left or even right. Period.",[1118,20517],{},"\nPrint designers do not have the same skill set as web site designers.",[1118,20520],{},"\nContent is King. Search engines need real text.",[1118,20523],{},"\nEnsure your web site can work in the major browsers FireFox and Internet Explorer.",[1118,20526],{},"\nNo flashing items on the web site (no blinking, blipping or barking)",[1118,20529],{},"\nNever put music on the web site.",[1118,20532],{},"\nUse text navigation (not graphics)",[1118,20535],{},"\nA site map with logical sub sections is better than using drop downs.",[1118,20538],{},"\nIf your site needs a search engine to find content it’s time to redesign the web site.",[1118,20541],{},"\nThe size of the pages is important. Keep it low and small. 50% of American web users do not have broadband.",[1118,20544],{},"\nDo not hide your message or obscure what you want users to do.",[1118,20547],{},"\nAllow individuals to get to the content fast and easily. Make the content easily visible and provide mechanisms to allow users to jump to items of interest.",[1118,20550],{},"\nIf you use video embed your video in Flash within the browser.",[1118,20553],{},"\nNever make your users mouse over a graphic to understand what it is or where it will navigate the user to.",[1118,20556],{},"\nUse new technology sparingly. The users of the web site will not be as impressed by new technical things as you may be.",[16,20559,20560],{},"Josiah this is a great list of things to do and not do to establish a great web site. These are certainly words to live by.",{"title":1080,"searchDepth":1081,"depth":1081,"links":20562},[],"2015-04-20T08:07:18.8100000-04:00","I read this post by Josiah Cole and have to provide this abbreviated list and less sarcastic version of things to do when designing a web site.",{},"\u002Farticles\u002Fweb-site-to-do-and-not-to-do-s",{"title":20490,"description":20564},"articles\u002Fweb-site-to-do-and-not-to-do-s",[8994],"67MSm15IlQYdTDZlaeesCLESt63dq4Hb94JhPe6NeDY",{"id":20572,"title":20573,"author":8,"body":20574,"createdAt":20619,"description":1915,"extension":1101,"img":8988,"meta":20620,"navigation":1104,"path":20621,"seo":20622,"stem":20623,"tags":20624,"updatedAt":20619,"__hash__":20625},"articles\u002Farticles\u002Fssms-tools-pack.md","SSMS Tools Pack",{"type":10,"value":20575,"toc":20617},[20576,20579,20582,20585,20588,20591,20594,20597,20600,20603,20611],[16,20577,20578],{},"This is a free (please donate) SQL Server Management Studio add-on that is small, easy to install and is packed with some great features.",[16,20580,20581],{},"Query Execution History – every sql statement that you run is automatically logged and available at a later time",[16,20583,20584],{},"Search Database Data – search through all non-binary columns in every table of the database for a search term.",[16,20586,20587],{},"Uppercase\u002FLowercase Keywords",[16,20589,20590],{},"Run one Script on multiple databases",[16,20592,20593],{},"Copy execution plan bitmaps to clipboard",[16,20595,20596],{},"Generate Insert statements for a single table, the whole database or current result sets",[16,20598,20599],{},"Create, Read, Update and Delete stored procedure generation",[16,20601,20602],{},"plus more!",[16,20604,20605],{},[1139,20606,20608],{"href":20607},"\u002Farticles\u002Fimages\u002Fimage_2.png",[156,20609],{"title":158,"style":15347,"height":20610,"alt":158,"src":8988,"width":8473,"border":8404},114,[16,20612,20613,20614],{},"Check it out ",[1139,20615,20573],{"href":20616,"target":1142},"http:\u002F\u002Fwww.ssmstoolspack.com\u002FFeatures.aspx",{"title":1080,"searchDepth":1081,"depth":1081,"links":20618},[],"2015-04-20T08:07:18.7000000-04:00",{},"\u002Farticles\u002Fssms-tools-pack",{"title":20573,"description":1915},"articles\u002Fssms-tools-pack",[8743],"B5bcM4AVCzbinRhCXW3lHv8jMYWeSI5bqFkI5LF3sBM",{"id":20627,"title":20628,"author":8,"body":20629,"createdAt":20701,"description":1915,"extension":1101,"img":20698,"meta":20702,"navigation":1104,"path":20703,"seo":20704,"stem":20705,"tags":20706,"updatedAt":20701,"__hash__":20707},"articles\u002Farticles\u002Fsonos-update-and-still-a-very-cool-product.md","Sonos Update and still a very cool product",{"type":10,"value":20630,"toc":20699},[20631,20643,20678,20686,20691],[16,20632,20633,20634,20636,20637,20639,20640,8422],{},"Today I received an update to my Sonos system.  Great things abound.",[1118,20635],{},"\nIncluded in this release is Sonos access to Last.fm, Pandora and 1000’s of radio stations and ‘shows’ from around the world.",[1118,20638],{},"\nJust messing around I entered West Chester, Ohio and got a list of all the local radio stations.  Of course you can enter any city you wish.  Very cool. ",[1139,20641],{"href":20642},"\u002Farticles\u002Fimages\u002FWindowsLiveWriter\u002FSonosUpdatestillaverycoolproduct_10506\u002Fimage_4.png",[16,20644,20645,20649,20650,1158,20653,20656,20657,20660,20661,20664,20665,20667,20668,20670,20671,20673,20674,20677],{},[1139,20646,20648],{"href":20647,"target":1142},"http:\u002F\u002Fwww.sonos.com\u002Fdefault.aspx","Sonos","®, Inc., the leading developer of wireless multi-room music systems for the home, today released Sonos System Software 2.7. Sonos 2.7 delivers a world of music to every room of the house-free of charge-by providing instant, computer-free access to ",[19,20651,20652],{},"Last.fm",[19,20654,20655],{},"Pandora","® personalized ",[19,20658,20659],{},"radio services",", plus more than ",[19,20662,20663],{},"15,000 radio stations"," and shows via Sonos Radio.",[1118,20666],{},"\nThe system now provides music from both subscription-based services (Napster®, Rhapsody® and SIRIUS®) and free music services (Last.fm, Pandora and Sonos Radio) right out of the box.",[1118,20669],{},"\nAll of these services stream music directly from the Internet to the house, so they work even when the computer is turned off – no need to download songs or have a server running.",[1118,20672],{},"\nSonos’ new Radio guide, powered by RadioTime, lets you tune in to more than 15,000 free Internet radio stations, radio shows and more. You can browse easily for both ",[19,20675,20676],{},"local"," and international stations or use Search to find a specific station, show or host. When you find what you want, simply add it to Favorites for your future listening.",[16,20679,20680,20682,20683,20685],{},[19,20681,20652],{}," on Sonos is a free global music service that lets you discover, play and share new songs and artists based on your unique musical tastes - right from any Sonos Controller. After an account is created on Last.fm, Sonos customers can enjoy continuous music streaming all over the house. Simply enter the name of a favorite artist or tag keywords and Last.fm’s unique recommendation system instantly creates a personalized radio station featuring music you’re sure to love. Last.fm on",[1118,20684],{},"\nSonos also features the capability to scrobble all the music you play on your Sonos Multi-Room Music System. Every song you listen to on Sonos - whether it’s from your personal music library or a music service like Napster®, Rhapsody®, Pandora®, and of course, Last.fm - is automatically added to your personal music profile. This allows Last.fm to customize your music recommendations and open the doors to even more music discovery, in more rooms of the house.",[16,20687,20688,20690],{},[19,20689,20655],{},", the popular personal radio service is now available for free on Sonos. After creating a free account on Pandora.com, Pandora lets you create and play up to 100 radio stations based on your favorite songs or artists. Using Pandora’s Music Genome Project®, Pandora’s highly-trained musicians analyze songs, one at a time, using close to 400 musical traits including melody, harmony, instrumentation, rhythm, vocals, lyrics, and more to automatically build a station with songs that share interesting musical similarities. With a Sonos Controller in hand, you can rate the music you hear to further refine the station’s playlist on the fly. Play the same Pandora radio station in each room, perfectly synchronized; or, play different stations in different rooms to fit the mood.",[16,20692,20693,20694,20696],{},"Other new features of Sonos System Software 2.7 include:\n• Updated Rhapsody support with improved sound quality. Rhapsody now streams at 192 MP3 (versus 128 kbps WMA previously).\n• Support for RTSP streaming protocol which allows for expanded Internet Radio coverage.",[1118,20695],{},[156,20697],{"src":20698,"alt":1080},"\u002Farticles\u002Fimages\u002Fsonos.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":20700},[],"2015-04-20T08:07:18.5200000-04:00",{},"\u002Farticles\u002Fsonos-update-and-still-a-very-cool-product",{"title":20628,"description":1915},"articles\u002Fsonos-update-and-still-a-very-cool-product",[20377],"btSrXkPFxDuH4_1iruxuoYityCioWZMOtTdG2NnYJro",{"id":20709,"title":20710,"author":8,"body":20711,"createdAt":20774,"description":20775,"extension":1101,"img":1915,"meta":20776,"navigation":1104,"path":20777,"seo":20778,"stem":20779,"tags":20780,"updatedAt":20774,"__hash__":20781},"articles\u002Farticles\u002Fsharepoint-web-part-deployment.md","Sharepoint Web Part Deployment",{"type":10,"value":20712,"toc":20772},[20713,20716,20750,20753],[16,20714,20715],{},"If when using Windows Sharepoint Services you are unable to retract or execute jobs seen through the management interface using the following commands can help to manually list and remove and redeploy solutions.",[16,20717,20718,20719,20721,20724,20725,20727,20730,20731,20733,20736,20737,20739,20744,20746,20749],{},"To see a list of all solutions on the server",[1118,20720],{},[19,20722,20723],{},"stsadm.exe -o enumsolutions","  To see a list of all deployments",[1118,20726],{},[19,20728,20729],{},"stsadm.exe -o enumdployments","  To cancel a deployment",[1118,20732],{},[19,20734,20735],{},"stsadm.exe -o canceldeployment -id {guid}","  To execute scheduled jobs",[1118,20738],{},[19,20740,20741,20742],{},"stsadm.exe -o execadmsvcjobs",[1118,20743],{},[1118,20745],{},[19,20747,20748],{},"Error: \"the solution cannot be removed when a job is scheduled or is running\" \u003C ","use the above commands to execute jobs that are scheduled",[16,20751,20752],{},"I am using something like the following when removing and deploying web parts (notice the execadmsvcjobs)",[16,20754,20755,20756,20760,20761,20763,20764,20766,20767,20769,20770,20760],{},"stsadm.exe -o retractsolution -name webPart.wsp -immediate -url {",[1139,20757,20759],{"rel":20758},[3695],"http:\u002F\u002F...} ","\nstsadm.exe -o execadmsvcjobs",[1118,20762],{},"\nstsadm.exe -o deletesolution -name webPart.wsp -override",[1118,20765],{},"\nstsadm.exe -o addsolution -filename webPart.wsp",[1118,20768],{},"\nstsadm.exe -o deploysolution -name webPart.wsp -immediate -allowgacdeployment -url {http:\u002F\u002F...} -force",[1118,20771],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":20773},[],"2015-04-20T08:07:18.3200000-04:00","Learn how to deploy web parts.",{},"\u002Farticles\u002Fsharepoint-web-part-deployment",{"title":20710,"description":20775},"articles\u002Fsharepoint-web-part-deployment",[15562],"o0IIXKtNlmzSimnQm8juIvIaJ1WCP7U-9Nnxq9lvtrA",{"id":20783,"title":20784,"author":8,"body":20785,"createdAt":20923,"description":1915,"extension":1101,"img":1915,"meta":20924,"navigation":1104,"path":20925,"seo":20926,"stem":20927,"tags":20928,"updatedAt":20923,"__hash__":20929},"articles\u002Farticles\u002Fsharepoint-wss-3-0-tips-debugging.md","Sharepoint WSS 3 Tips Debugging",{"type":10,"value":20786,"toc":20921},[20787,20790,20798,20801,20807,20810,20813,20843,20905,20916,20919],[16,20788,20789],{},"Getting the w3wp.exe ProcessID for Attach to Process  ",[13,20791,12793,20792,14671,20795,11776],{},[19,20793,20794],{},"Open command prompt and type iisapp.vbs",[19,20796,20797],{},"Attach a debugger to your code",[19,20799,20800],{},"The code you are using to debug must be exactly the same as the executing assembly",[16,20802,20803,20804,1200],{},"This often catches people out in SharePoint development as the assembly SharePoint is using is often in a different location than the default build directory (i.e. in the bin directory in IIS or in the GAC). You may want to include a post build script to copy your assembly to the correct location to help automate this process. Also be careful when debugging assemblies that are in the GAC as you may need to do an iisreset to ensure ASP.NET uses the latest version of your assembly.       *        ",[19,20805,20806],{},"The .pdb file needs to be in the same directory as the assembly to see line numbers",[16,20808,20809],{},"This is easy if you are using the bin directory of the website (recommended when developing), but you cannot copy these files directly into the GAC. You can get around this with the following steps:                  * Map a network drive to the GAC (C:\\WINDOWS\\assembly) folder.",[16,20811,20812],{},"This allows you to see the actual folder structure and copy files into the folders as they appear on disk (opposed to the shell that is shown when browsing directly).           * Copy the .pdb file into your assembly folder in the GAC_MSIL subfolder so that it sits next to the assembly dll.",[48,20814,20815],{},[51,20816,20817,20820,20821,13053,20827,13053,20835,13053,20840],{},[19,20818,20819],{},"Activate features through the UI if you want to debug feature receivers",". If you use the stsadm command line tool to automate feature deployment the w3wp process will be recycled so any debuggers will be detached. Activating these through the central admin or the site features page will ensure the w3wp process is running.       ",[13,20822,20823,20824,11776],{},"    ",[19,20825,20826],{},"Use Debug and Trace statements",[13,20828,20829,20830,20834],{},"   System.Diagnostics.Debug and Trace statements are another great way of tracking down errors in your code. As Debug calls are removed from release builds, these can be used extensively to help track down errors in development. To view these you can use tools such as\n",[1139,20831,20833],{"href":20832},"http:\u002F\u002Fwww.microsoft.com\u002Ftechnet\u002Fsysinternals\u002Futilities\u002Fdebugview.mspx","DebugView"," to view messages on local or remote machines ",[13,20836,12793,20837,11776],{},[19,20838,20839],{},"Use Try-Catch statements",[13,20841,20842],{},"   As with standard ASP.NET applications, Try-Catch statements can help catch and log error messages that occur in your code. This can be combined with Debug and Trace statements to view or log errors, or display meaningful messages to the user.\nFor example in a web control you might do the following:",[2232,20844,20846],{"className":8721,"code":20845,"language":8723,"meta":1080,"style":1080},"protected override void Render(HtmlTextWriter writer)      \n{       \n    try       \n    {       \n        \u002F\u002F code that might cause an error       \n    }       \n    catch       \n    {       \n        Trace.Write(ex);       \n        writer.Write(ex.Message);       \n    }       \n} \n",[2239,20847,20848,20853,20858,20863,20868,20873,20878,20883,20887,20892,20897,20901],{"__ignoreMap":1080},[4215,20849,20850],{"class":4217,"line":4218},[4215,20851,20852],{},"protected override void Render(HtmlTextWriter writer)      \n",[4215,20854,20855],{"class":4217,"line":1081},[4215,20856,20857],{},"{       \n",[4215,20859,20860],{"class":4217,"line":1084},[4215,20861,20862],{},"    try       \n",[4215,20864,20865],{"class":4217,"line":4234},[4215,20866,20867],{},"    {       \n",[4215,20869,20870],{"class":4217,"line":4240},[4215,20871,20872],{},"        \u002F\u002F code that might cause an error       \n",[4215,20874,20875],{"class":4217,"line":4246},[4215,20876,20877],{},"    }       \n",[4215,20879,20880],{"class":4217,"line":4252},[4215,20881,20882],{},"    catch       \n",[4215,20884,20885],{"class":4217,"line":4258},[4215,20886,20867],{},[4215,20888,20889],{"class":4217,"line":4264},[4215,20890,20891],{},"        Trace.Write(ex);       \n",[4215,20893,20894],{"class":4217,"line":4270},[4215,20895,20896],{},"        writer.Write(ex.Message);       \n",[4215,20898,20899],{"class":4217,"line":4276},[4215,20900,20877],{},[4215,20902,20903],{"class":4217,"line":4282},[4215,20904,9887],{},[16,20906,20907,20910,20911,20915],{},[19,20908,20909],{},"View the SharePoint Logs","\nThe raw SharePoint log files are extremely cluttered and hard to use but there is an alternative. The ",[1139,20912,20914],{"href":20913},"http:\u002F\u002Fwww.codeplex.com\u002Ffeatures\u002FRelease\u002FProjectReleases.aspx?ReleaseId=2502","LogViewer feature on CodePlex"," lets you easily select a log file and view a filtered display of the items you are interested in.    ",[13,20917,20918],{},"   You can also tweak the information that is written to the SharePoint logs via the Diagnostic Logging link under Logging and Reporting in the operations section of Central Administration.",[4682,20920,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":20922},[],"2015-04-20T08:07:18.2100000-04:00",{},"\u002Farticles\u002Fsharepoint-wss-3-0-tips-debugging",{"title":20784,"description":1915},"articles\u002Fsharepoint-wss-3-0-tips-debugging",[15562],"a4E2rqcS5lz36oL5AbpTT_W92wj7pXV4YGKqJglbkn0",{"id":20931,"title":20932,"author":8,"body":20933,"createdAt":21006,"description":21007,"extension":1101,"img":1915,"meta":21008,"navigation":1104,"path":21009,"seo":21010,"stem":21011,"tags":21012,"updatedAt":21006,"__hash__":21013},"articles\u002Farticles\u002Fsql-execution-enterprise-manager-qa-vs-net-execution.md","SQL Execution (Enterprise Manager-QA) VS. .NET Execution",{"type":10,"value":20934,"toc":21004},[20935,20957,20978],[16,20936,20937,20938,20940,20941,20943,20944,20946,20947,20949,20950,20952,20953,20956],{},"I have been chasing an issue for quite a while where the query would timeout when executed from an ASP.NET interface.  If I ran that exact same query through Query Analyzer the results would be returned in less than 2 seconds.    I have for a while been struggling with why it is different between those two interfaces.  I thought about connection pooling issues, command time outs and connection timeouts and was focused on that for a while.  Even after extending those values from the default the query would still time out.  It was often I would see an exception similar to   ---------------------------  SQL Exception Information:",[1118,20939],{},"\nErrorId: -2",[1118,20942],{},"\nMessage: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.",[1118,20945],{},"\nLine Number: 0",[1118,20948],{},"\nProcedure:",[1118,20951],{},"\n---------------------------  To put this post in the proper context think about one of your application search stored procedures.  The interface shows a dozen or more optional textboxes for user entry to narrow down the results.  The stored procedure in this case often has many parameters that could be used with the actual query.  This is the case for the query that I am discussing herein.  When you execute a stored procedure for the first time the query processor constructs a query plan based on the the state of the statistics and the input parameters.  So, the query plan is created upon first execution and is cached in case some other invocation of the same stored procedure comes along before the cache is cleared.  So, when executing through the web interface SQL Server is using the same execution plan that was created by the prior user.  This can look significantly different between users and what parameters they provide before they run the search.  So, to have SQL Server generate a new query plan upon each execution the \"",[19,20954,20955],{},"WITH RECOMPILE","\" can be used.  By adding this parameter SQL Server regardless of the parameters passed in it will create a new optimal plan.  ",[13,20958,20959,20960,20962,20963,20965,20966,20968,20969,20971,20972,20974,20975],{},"   i.e.",[1118,20961],{},"\nCreate Procedure dbo.GetCustomers",[1118,20964],{},"\n            @LastName varchar(200),",[1118,20967],{},"\n            @FirstName varchar(200),",[1118,20970],{},"\n            .... \nWITH RECOMPILE AS",[1118,20973],{},"\n  BEGIN",[16,20976,20977],{},"  END ",[13,20979,20980,20981,20962,20983,20965,20985,20968,20987,20989,20990,20974,20992,20994,20995,20997,20998,21000,21001,21003],{},"   i.e. SQL 2005 option",[1118,20982],{},[1118,20984],{},[1118,20986],{},[1118,20988],{},"\n            .... \nAS",[1118,20991],{},[1118,20993],{},"\n      Query 1",[1118,20996],{},"\n      Query 2 OPTION(RECOMPILE)",[1118,20999],{},"\n      Query 3 OPTION(RECOMPILE)",[1118,21002],{},"\n      Query 4 \n  END ",{"title":1080,"searchDepth":1081,"depth":1081,"links":21005},[],"2015-04-20T08:07:18.1100000-04:00","I have been chasing an issue for quite a while where the query would timeout when executed from an ASP.NET interface.  If I ran that exact same query through Query Analyzer the results would be returned in less than 2 seconds.    I have for a while been struggling with why it is different between those two interfaces.  I thought about connection pooling issues, command time outs and connection timeouts and was focused on that for a while.  Even after extending those values from the default the query would still time out.  It was often I would see an exception similar to   ---------------------------  SQL Exception Information:\nErrorId: -2\nMessage: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.\nLine Number: 0\nProcedure:\n---------------------------  To put this post in the proper context think about one of your application search stored procedures.  The interface shows a dozen or more optional textboxes for user entry to narrow down the results.  The stored procedure in this case often has many parameters that could be used with the actual query.  This is the case for the query that I am discussing herein.  When you execute a stored procedure for the first time the query processor constructs a query plan based on the the state of the statistics and the input parameters.  So, the query plan is created upon first execution and is cached in case some other invocation of the same stored procedure comes along before the cache is cleared.  So, when executing through the web interface SQL Server is using the same execution plan that was created by the prior user.  This can look significantly different between users and what parameters they provide before they run the search.  So, to have SQL Server generate a new query plan upon each execution the \"WITH RECOMPILE\" can be used.  By adding this parameter SQL Server regardless of the parameters passed in it will create a new optimal plan.  ",{},"\u002Farticles\u002Fsql-execution-enterprise-manager-qa-vs-net-execution",{"title":20932,"description":21007},"articles\u002Fsql-execution-enterprise-manager-qa-vs-net-execution",[8743],"B2ug2YjmetZNfsPVc-Gc3dmawycSNaf-YqYAdz1IpqQ",{"id":21015,"title":21016,"author":8,"body":21017,"createdAt":21084,"description":1915,"extension":1101,"img":21085,"meta":21086,"navigation":1104,"path":21087,"seo":21088,"stem":21089,"tags":21090,"updatedAt":21084,"__hash__":21091},"articles\u002Farticles\u002Fstring-literals-and-c.md","String Literals and C#",{"type":10,"value":21018,"toc":21082},[21019,21022,21041,21050,21070,21073],[16,21020,21021],{},"I was looking for some utility that would take a very long string and convert it to vb.net or c# with line continuation(s) characters. String literals to the rescue.  C# supports two forms of string literals: regular string literals and verbatim string literals. ",[16,21023,1977,21024,21029,21030,21036,21037,21040],{},[19,21025,21026],{},[9125,21027,21028],{},"regular string literal"," consists of zero or more characters enclosed in double quotes, as in ",[2239,21031,21032,21033,21032],{},"\"",[2239,21034,21035],{},"hello",", and may include both simple escape sequences (such as ",[2239,21038,21039],{},"\\t"," for the tab character) and hexadecimal and Unicode escape sequences. ",[16,21042,21043,21044,21046,21047,21049],{},"In c# regular strings can only span multiple lines with syntax similar to the following: string sql = “SELECT customer “ +",[1118,21045],{},"\n“FROM customers “ +",[1118,21048],{},"\n“WHERE custId=10”;",[16,21051,1977,21052,21057,21058,21061,21062,21065,21066,1200],{},[19,21053,21054],{},[9125,21055,21056],{},"verbatim string literal"," consists of an ",[2239,21059,21060],{},"@"," character followed by a double-quote character, zero or more characters, and a closing double-quote character. A simple example is ",[2239,21063,21064],{},"@\"hello\"",". In a verbatim string literal, the characters between the delimiters are interpreted verbatim, the only exception being a ",[21067,21068,21069],"i",{},"quote-escape-sequence",[16,21071,21072],{},"In particular, simple escape sequences and hexadecimal and Unicode escape sequences are not processed in verbatim string literals.  The above sample can be replaced with the ‘literal’ designated by the @ symbol as follows:",[16,21074,21075,21076,21078,21079,21081],{},"string sql = @“SELECT",[1118,21077],{},"\nFROM customers",[1118,21080],{},"\nWHERE custId=10”;",{"title":1080,"searchDepth":1081,"depth":1081,"links":21083},[],"2015-04-20T08:07:18.0100000-04:00","\u002Farticles\u002Fimages\u002FF0VD2LVE2v.png",{},"\u002Farticles\u002Fstring-literals-and-c",{"title":21016,"description":1915},"articles\u002Fstring-literals-and-c",[8723],"wR7AFv2jyIEaMk54IdB_kd0WIeTKqKzKljWKic55QNQ",{"id":21093,"title":21094,"author":8,"body":21095,"createdAt":21221,"description":1915,"extension":1101,"img":1915,"meta":21222,"navigation":1104,"path":21223,"seo":21224,"stem":21225,"tags":21226,"updatedAt":21221,"__hash__":21227},"articles\u002Farticles\u002Ftesting-web-serviceasmx-remotely-yes-you-can.md","Testing Web Service(ASMX) Remotely (yes, you can!)",{"type":10,"value":21096,"toc":21219},[21097,21100],[16,21098,21099],{},"Often we test web services by either locally on our workstations or remoting to the server and accessing the asmx page. ",[16,21101,21102,21103,13053,21215],{},"If you try to access the asmx remotely however you are not given the option to test the server (by using the server url address).  By adding the following code the \u003Csystem.web> section of asmx web site web.config you can now test your services remotely.  ",[4215,21104,21108,21119,21135,21150,21164,21178,21194,21208],{"className":21105,"style":21107},[21106],"Apple-style-span","word-spacing: 0px; font: 12px\u002F15px verdana; text-transform: none; color: rgb(51,51,51); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0",[1128,21109,21110],{},[21111,21112,21113],"font",{"size":1084},[21111,21114,21116,21117],{"face":21115},"Calibri","\u003CwebServices>",[1118,21118],{},[1128,21120,21121],{},[21111,21122,21123],{"size":1084},[21111,21124,21125,21132,21133],{"face":21115},[4215,21126,21127,21128],{},"       ",[4215,21129,8422],{"className":21130},[21131],"Apple-converted-space","\u003Cprotocols>",[1118,21134],{},[1128,21136,21137],{},[21111,21138,21139],{"size":1084},[21111,21140,21141,21147,21148],{"face":21115},[4215,21142,21143,21144],{},"           ",[4215,21145,8422],{"className":21146},[21131],"\u003Cadd name=\"HttpSoap12\"\u002F>",[1118,21149],{},[1128,21151,21152],{},[21111,21153,21154],{"size":1084},[21111,21155,21156,21161,21162],{"face":21115},[4215,21157,21143,21158],{},[4215,21159,8422],{"className":21160},[21131],"\u003Cadd name=\"HttpSoap\"\u002F>",[1118,21163],{},[1128,21165,21166],{},[21111,21167,21168],{"size":1084},[21111,21169,21170,21175,21176],{"face":21115},[4215,21171,21143,21172],{},[4215,21173,8422],{"className":21174},[21131],"\u003Cadd name=\"HttpGet\"\u002F>",[1118,21177],{},[1128,21179,21180],{},[21111,21181,21182],{"size":1084},[21111,21183,21184,21189,21191,21192],{"face":21115},[4215,21185,15043,21186],{},[4215,21187,8422],{"className":21188},[21131],[4215,21190,8407],{},"\u003Cadd name=\"HttpPost\"\u002F>",[1118,21193],{},[1128,21195,21196],{},[21111,21197,21198],{"size":1084},[21111,21199,21200,21205,21206],{"face":21115},[4215,21201,21127,21202],{},[4215,21203,8422],{"className":21204},[21131],"\u003C\u002Fprotocols>",[1118,21207],{},[1128,21209,21210],{},[21111,21211,21212],{"size":1084},[21111,21213,21214],{"face":21115},"\u003C\u002FwebServices>",[4215,21216,21218],{"className":21217,"style":21107},[21106],"The above code addresses the issue related to \"The test form is only available for requests from the local machine.\" error message.",{"title":1080,"searchDepth":1081,"depth":1081,"links":21220},[],"2015-04-20T08:07:17.9200000-04:00",{},"\u002Farticles\u002Ftesting-web-serviceasmx-remotely-yes-you-can",{"title":21094,"description":1915},"articles\u002Ftesting-web-serviceasmx-remotely-yes-you-can",[8994],"SxKDc8JlqMksiHb_H-HoXeE2EcSX8ZxEqtt1Yn_DRPQ",{"id":21229,"title":21230,"author":8,"body":21231,"createdAt":21330,"description":21331,"extension":1101,"img":1915,"meta":21332,"navigation":1104,"path":21333,"seo":21334,"stem":21335,"tags":21336,"updatedAt":21330,"__hash__":21337},"articles\u002Farticles\u002Fcss-lost.md","CSS Lost, Missing, Absent, Gone after Postback in Asp.NET",{"type":10,"value":21232,"toc":21328},[21233,21236,21239,21242,21247,21250,21253],[16,21234,21235],{},"I have a generic function in one of my helper libraries that allows me to open a new browser window when a button is selected.  \nThe button posts back to the server runs some code and opens a new window.  \nI often use this sort of thing on a reporting page allowing me to post some search criteria and open a new window (a pdf report).",[16,21237,21238],{},"I found this type of helper function useful however I found that I was losing my CSS after the postback.",[16,21240,21241],{},"To avoid losing the css keep the following in mind:",[48,21243,21244],{},[51,21245,21246],{},"ensure that your css files are included declarative in your aspx page (not through code behind)",[16,21248,21249],{},"use Page.ClientScript.RegisterStartupScript(this.GetType(),”name”,script); (Not Response.Write)",[16,21251,21252],{},"The end helper function looks something like the following:",[9636,21254,13796,21256,13796,21269,10274,21276,13796,21287,11983,21305,11983,21318,11983,21325,11776],{"style":21255},"font-size: 9pt; background: white; color: black; font-family: consolas",[16,21257,21259,21260,21264,21266],{"style":21258},"margin: 0px","    ",[4215,21261,21263],{"style":21262},"color: gray","\u002F\u002F\u002F",[4215,21265,11776],{"style":14677},[4215,21267,21268],{"style":21262},"\u003Csummary>",[16,21270,21259,21271,21273],{"style":21258},[4215,21272,21263],{"style":21262},[4215,21274,21275],{"style":14677}," redirect to a new page from codebehind",[16,21277,21259,21278,21280,21282,21285],{"style":21258},[4215,21279,21263],{"style":21262},[4215,21281,11776],{"style":14677},[4215,21283,21284],{"style":21262},"\u003C\u002Fsummary>",[4215,21286,21259],{"style":14677},[16,21288,21259,21289,11776,21292,11776,21294,21297,21298,21300,21301,21304],{"style":21258},[4215,21290,21291],{"style":14600},"static",[4215,21293,14963],{"style":14600},[4215,21295,21296],{"style":14600},"void"," RedirectToNewWindow(",[4215,21299,15022],{"style":14600}," url, System.Web.UI.",[4215,21302,21303],{"style":14591},"Page"," page) {        ",[16,21306,21307,21308,21310,21311,21314,21315,15454],{"style":21258},"        ",[4215,21309,15022],{"style":14600}," script = ",[4215,21312,21313],{"style":14619},"\"\u003Cscript>window.open('\""," + url + ",[4215,21316,21317],{"style":14619},"\"');\u003C\u002Fscript>\"",[16,21319,21320,21321,21324],{"style":21258},"        page.ClientScript.RegisterStartupScript(page.GetType(), ",[4215,21322,21323],{"style":14619},"\"redirectscript\"",",script);        ",[16,21326,21327],{"style":21258},"    }",{"title":1080,"searchDepth":1081,"depth":1081,"links":21329},[],"2015-04-20T08:07:17.8100000-04:00","I have a generic function in one of my helper libraries that allows me to open a new browser window when a button is selected.",{},"\u002Farticles\u002Fcss-lost",{"title":21230,"description":21331},"articles\u002Fcss-lost",[8994],"b2i1IqyW2Q653DvjckNBJxu4yY2Re8ejfAldTtUJY3I",{"id":21339,"title":21340,"author":8,"body":21341,"createdAt":21404,"description":21405,"extension":1101,"img":21401,"meta":21406,"navigation":1104,"path":21407,"seo":21408,"stem":21409,"tags":21410,"updatedAt":21404,"__hash__":21412},"articles\u002Farticles\u002Fanonymous-objects-or-types-net-3-0.md","Anonymous Objects or Types (.NET 3.0+ )",{"type":10,"value":21342,"toc":21402},[21343,21346,21366,21369,21372,21375,21393,21396],[16,21344,21345],{},"Details...",[48,21347,21348,21351,21354,21357,21360,21363],{},[51,21349,21350],{},"an anonymous type declaration begins with the new keyword followed by a member-initializer list in braces {}",[51,21352,21353],{},"the compiler generates a new class definition that contains the properties specified in the new member-initializer list",[51,21355,21356],{},"all properties of an anonymous type are public and immutable  * anonymous type properties are read-only (you cannot modify a properties value once the object is created)",[51,21358,21359],{},"each property's type is inferred from the values assigned to it",[51,21361,21362],{},"the compiler defines a ToString method that returns comma-separated list of property-name = value pairs",[51,21364,21365],{},"Equals method compares the properties of two or more anonymous types",[16,21367,21368],{},"Examples...  \u002F\u002FCreate a 'person' object using an anonymous type",[16,21370,21371],{},"var bob = new { Name = \"Bob\", Age = 37 };",[16,21373,21374],{},"bob in this case is the anonymous type, and the types of the properties are inferred by the value assigned.  \u002F\u002Fdisplay information (note here however that the ToString is not required as a ToString method is automatically defined and is the anonymous type)",[16,21376,21377,21378,21380,21381,21383,21384,21386,21387,21389,21390,21392],{},"Console.WriteLine(\"Bob:\" + bob.ToString());",[1118,21379],{},"\n\u002F\u002Fthe ToString() method would output the following",[1118,21382],{},"\nBob: { Name = Bob, Age = 37 }",[1118,21385],{},"\nvar steve = new { Name = \"Steve\", Age = 36 };",[1118,21388],{},"\n\u002F\u002Fthe compiler is able to recognize the anonymous type for bob and steve are identical and of the same class by the fact that the properties and types were\nidentical for both bob and steve",[1118,21391],{},"\n\u002F\u002Fthe anonymous type also creates an equals method that is capable of comparing all objects of this anonymous\ntype (so name and age properties will be compared)",[16,21394,21395],{},"Console.WriteLine(bob.Equals(steve) ? \"equal\" : \"not equal\"));",[16,21397,21398,21399],{},"The output from the is \"not equal\".",[156,21400],{"src":21401,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fanonymous.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":21403},[],"2015-04-20T08:07:17.7300000-04:00","Anonymous types.",{},"\u002Farticles\u002Fanonymous-objects-or-types-net-3-0",{"title":21340,"description":21405},"articles\u002Fanonymous-objects-or-types-net-3-0",[21411],"NETFeatures","cGVbO2z6ACthfgTvN4W5MWa6AETH2I_6hrC8J6udoNU",{"id":21414,"title":21415,"author":8,"body":21416,"createdAt":21449,"description":21450,"extension":1101,"img":21446,"meta":21451,"navigation":1104,"path":21452,"seo":21453,"stem":21454,"tags":21455,"updatedAt":21449,"__hash__":21457},"articles\u002Farticles\u002Fauto-implemented-properties-c-net-3-0.md","Auto-Implemented Properties c# .NET 3.0+",{"type":10,"value":21417,"toc":21447},[21418,21433,21439],[16,21419,21420,21421,21423,21424,21426,21427,21429,21430,21432],{},"Instead of the following typical property setter\u002Fgetter  private string courseName;",[1118,21422],{},"\npubic string CourseName{",[1118,21425],{},"\n   get { return courseName;}",[1118,21428],{},"\n   set { courseName = value;}",[1118,21431],{},"\n}   ",[16,21434,21435,21438],{},[19,21436,21437],{},"Auto-Implemented"," property implicitly creates an instance variable for property CourseName",[16,21440,21441,21442,21444],{},"public string CourseName {get; set;}      * unable to use the private variable for this property (hidden from developer)     * developer can only reference within the class via CourseName     This is a reasonable approach for quick prototyping of properties only.",[1118,21443],{},[156,21445],{"src":21446,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fauto.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":21448},[],"2015-04-20T08:07:17.6400000-04:00","Instead of the following typical property setter\u002Fgetter  private string courseName;\npubic string CourseName{\n   get { return courseName;}\n   set { courseName = value;}\n}   ",{},"\u002Farticles\u002Fauto-implemented-properties-c-net-3-0",{"title":21415,"description":21450},"articles\u002Fauto-implemented-properties-c-net-3-0",[21456],".NET Features","xJ45NgU91LY4F4gvHzxbOH5uIutSNLauJCo5Oy2KAII",{"id":21459,"title":21460,"author":8,"body":21461,"createdAt":21519,"description":21520,"extension":1101,"img":21521,"meta":21522,"navigation":1104,"path":21523,"seo":21524,"stem":21525,"tags":21526,"updatedAt":21519,"__hash__":21528},"articles\u002Farticles\u002Fenterprise-library-components-4-1-contents-of-the-download.md","Enterprise Library Components 4.1 (Contents of the download)",{"type":10,"value":21462,"toc":21517},[21463,21466,21471,21474,21485,21488,21508],[16,21464,21465],{},"The default installation folder C:\\Program Files\\Microsoft Enterprise Library 4.1 - October 2008",[48,21467,21468],{},[51,21469,21470],{},"Bin - contains the binaries you can use in the application. ",[16,21472,21473],{},"Also, the configuration editor EntLibConfig.exe which can be used to create and edit configuration files for EntLib",[48,21475,21476,21479,21482],{},[51,21477,21478],{},"Docs - documentation",[51,21480,21481],{},"Src - contains the installer file for the Enterprise Library source file",[51,21483,21484],{},"Visual Studio Integration - contains binaries that make the configuration Editor available in Visual Studio",[16,21486,21487],{},"The installer also puts the original source code in C:\\EntLib41Src",[48,21489,21490,21493,21499,21502,21505],{},[51,21491,21492],{},"bin - contains the same as the bin above",[51,21494,21495,21496,21498],{},"Blocks - contains a solution that houses all 42 Enterprise Library projects. There is also a second solution that additionally contains unit test projects,\nand the actual unit tests to verify correct working of Enterprise Library as you change it.",[1118,21497],{},"This is a great value that allows you to feel comfortable editing this pile of code while being able to prove you have not broken anything",[51,21500,21501],{},"Lib - contains object builder and unity binaries that you can use in your application independent of EntLib",[51,21503,21504],{},"Quick Starts - contains sample code in both C# and VB.NET that you can use to see available functionality of EntLib and how to use it in your own applications.",[51,21506,21507],{},"Scripts - contains batch files to amongst others compile EntLib from the source, register assemblies and to install Northwind database for the quick starts",[16,21509,21510,21511,21514],{},"Enteprise Library 4.1 can be found ",[1139,21512],{"title":21513,"href":21513},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fdd203099.aspx",[1139,21515,21513],{"href":21513,"rel":21516},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":21518},[],"2015-04-20T08:07:17.5500000-04:00","Learn about Microsoft Enterprise Library","\u002Farticles\u002Fimages\u002FwnzEaKNdyZ.png",{},"\u002Farticles\u002Fenterprise-library-components-4-1-contents-of-the-download",{"title":21460,"description":21520},"articles\u002Fenterprise-library-components-4-1-contents-of-the-download",[21527],"enterpriselibrary","VPzkUCTzFlbTNRdwVqnyU6p2PWmCgYjJgbGSKWQNA1E",{"id":21530,"title":21531,"author":8,"body":21532,"createdAt":21595,"description":21596,"extension":1101,"img":21597,"meta":21598,"navigation":1104,"path":21599,"seo":21600,"stem":21601,"tags":21602,"updatedAt":21595,"__hash__":21603},"articles\u002Farticles\u002Fescape-sequences-and-verbatim-strings-in-c.md","Escape Sequences and Verbatim Strings in C#",{"type":10,"value":21533,"toc":21593},[21534,21537,21540,21543,21548,21551,21554,21557,21560,21563,21566,21569,21572,21575,21578,21581,21587,21590],[16,21535,21536],{},"C# uses special escape sequences within a string to signify that what follows is to be treated differently.  The special character is the backslash .  This character says to treat whatever follows it as though it were part of the string itself. ",[16,21538,21539],{},"string msg = \"Spot the dog said: \" get that dog bone\"\";  \u002F\u002F knowing this the following is good syntax:",[16,21541,21542],{},"Spot the dog said: \"get that dog bone\" \u002F\u002Foutput",[16,21544,21545],{},[19,21546,21547],{},"List of C# Escape Sequences",[16,21549,21550],{},"\"  Display a double quotation mark",[16,21552,21553],{},"'   Display a single quotation mark.",[16,21555,21556],{},"\\  Display a backslash.",[16,21558,21559],{},"\\0  Null (non-printing).",[16,21561,21562],{},"\\a  Alarm (beep terminal alarm).",[16,21564,21565],{},"\\b  Backspace (back up one character position).",[16,21567,21568],{},"\\f   Form feed (advance to next page).",[16,21570,21571],{},"\\n  Newline (advance to next line).",[16,21573,21574],{},"\\r  Carriage return (move to left margin).",[16,21576,21577],{},"\\t  Tab (advance one tab space, often eight characters).",[16,21579,21580],{},"\\v  Vertical tab.",[16,21582,21583,21584,21586],{},"C# provides a way to avoid 'escaping' characters in strings.  You can use the ",[19,21585,21056],{},"\ncharacter @ to tell VS.NET to build the string exactly as it appears.\nstring msg = @\"go to c:\\temp\"; \u002F\u002F this would work",[16,21588,21589],{},"The verbatim string can be used to allow a single string to span more than one line i.e.",[16,21591,21592],{},"string msg = @\"this is great\nto be under\nthe sun\";",{"title":1080,"searchDepth":1081,"depth":1081,"links":21594},[],"2015-04-20T08:07:17.4600000-04:00","Lots of escape sequences in c#","\u002Farticles\u002Fimages\u002Fescape.jpg",{},"\u002Farticles\u002Fescape-sequences-and-verbatim-strings-in-c",{"title":21531,"description":21596},"articles\u002Fescape-sequences-and-verbatim-strings-in-c",[8994],"bVBNvMdJ6cuQ53UFAK93lprV_NldOOv6yHzK6EMFW1I",{"id":21605,"title":21606,"author":8,"body":21607,"createdAt":21748,"description":21749,"extension":1101,"img":1915,"meta":21750,"navigation":1104,"path":21751,"seo":21752,"stem":21753,"tags":21754,"updatedAt":21748,"__hash__":21755},"articles\u002Farticles\u002Fsql-server-ndash-find-field-value-in-database.md","SQL Server Find Field Value in Database",{"type":10,"value":21608,"toc":21746},[21609,21612,21615,21744],[16,21610,21611],{},"The following is a SQL Script that can be run in a database to return all tables and columns where a particular value is present. \nThis can be used for strings or values with a small modification.  This type of thing is great when moving applications\u002Fproducts between servers. ",[16,21613,21614],{},"This is certainly a good script to include in your master table to be used over and over.",[2232,21616,21618],{"className":7871,"code":21617,"language":7873,"meta":1080,"style":1080},"DECLARE @value VARCHAR(64)\nDECLARE @sql VARCHAR(1024)\nDECLARE @table VARCHAR(64)\nDECLARE @column VARCHAR(64)\nSET @value = 'valuehere'\nCREATE TABLE #t (\n    tablename VARCHAR(64),\n    columnname VARCHAR(64)\n)\nDECLARE TABLES CURSOR FOR \nSELECT o.name, c.name FROM syscolumns c \nINNER JOIN sysobjects o ON c.id = o.id \nWHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)\nORDER BY o.name, c.name\nOPEN TABLES\nFETCH NEXT FROM TABLES\nINTO @table, @column WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '  \n--SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) = ''' + @value + ''') \n'SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') \n'SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''\nSET @sql = @sql + @column + ''')'\nEXEC(@sql)\nFETCH NEXT FROM TABLES INTO @table, @column END CLOSE TABLES DEALLOCATE TABLES SELECT * \nFROM #t \nDROP TABLE #t \n",[2239,21619,21620,21625,21630,21635,21640,21645,21650,21655,21660,21664,21669,21674,21679,21684,21689,21694,21699,21704,21709,21714,21719,21724,21729,21734,21739],{"__ignoreMap":1080},[4215,21621,21622],{"class":4217,"line":4218},[4215,21623,21624],{},"DECLARE @value VARCHAR(64)\n",[4215,21626,21627],{"class":4217,"line":1081},[4215,21628,21629],{},"DECLARE @sql VARCHAR(1024)\n",[4215,21631,21632],{"class":4217,"line":1084},[4215,21633,21634],{},"DECLARE @table VARCHAR(64)\n",[4215,21636,21637],{"class":4217,"line":4234},[4215,21638,21639],{},"DECLARE @column VARCHAR(64)\n",[4215,21641,21642],{"class":4217,"line":4240},[4215,21643,21644],{},"SET @value = 'valuehere'\n",[4215,21646,21647],{"class":4217,"line":4246},[4215,21648,21649],{},"CREATE TABLE #t (\n",[4215,21651,21652],{"class":4217,"line":4252},[4215,21653,21654],{},"    tablename VARCHAR(64),\n",[4215,21656,21657],{"class":4217,"line":4258},[4215,21658,21659],{},"    columnname VARCHAR(64)\n",[4215,21661,21662],{"class":4217,"line":4264},[4215,21663,7500],{},[4215,21665,21666],{"class":4217,"line":4270},[4215,21667,21668],{},"DECLARE TABLES CURSOR FOR \n",[4215,21670,21671],{"class":4217,"line":4276},[4215,21672,21673],{},"SELECT o.name, c.name FROM syscolumns c \n",[4215,21675,21676],{"class":4217,"line":4282},[4215,21677,21678],{},"INNER JOIN sysobjects o ON c.id = o.id \n",[4215,21680,21681],{"class":4217,"line":4288},[4215,21682,21683],{},"WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)\n",[4215,21685,21686],{"class":4217,"line":4294},[4215,21687,21688],{},"ORDER BY o.name, c.name\n",[4215,21690,21691],{"class":4217,"line":4300},[4215,21692,21693],{},"OPEN TABLES\n",[4215,21695,21696],{"class":4217,"line":4306},[4215,21697,21698],{},"FETCH NEXT FROM TABLES\n",[4215,21700,21701],{"class":4217,"line":4312},[4215,21702,21703],{},"INTO @table, @column WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '  \n",[4215,21705,21706],{"class":4217,"line":4318},[4215,21707,21708],{},"--SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) = ''' + @value + ''') \n",[4215,21710,21711],{"class":4217,"line":4324},[4215,21712,21713],{},"'SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') \n",[4215,21715,21716],{"class":4217,"line":4330},[4215,21717,21718],{},"'SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''\n",[4215,21720,21721],{"class":4217,"line":4336},[4215,21722,21723],{},"SET @sql = @sql + @column + ''')'\n",[4215,21725,21726],{"class":4217,"line":4342},[4215,21727,21728],{},"EXEC(@sql)\n",[4215,21730,21731],{"class":4217,"line":4348},[4215,21732,21733],{},"FETCH NEXT FROM TABLES INTO @table, @column END CLOSE TABLES DEALLOCATE TABLES SELECT * \n",[4215,21735,21736],{"class":4217,"line":4353},[4215,21737,21738],{},"FROM #t \n",[4215,21740,21741],{"class":4217,"line":4359},[4215,21742,21743],{},"DROP TABLE #t\n",[4682,21745,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":21747},[],"2015-04-20T08:07:17.3700000-04:00","SQL Script that can be run in a database to return all tables and columns where...",{},"\u002Farticles\u002Fsql-server-ndash-find-field-value-in-database",{"title":21606,"description":21749},"articles\u002Fsql-server-ndash-find-field-value-in-database",[8743],"9WL54maowA8aY8EDRpBT04V-F_6eINuHpi58uWVJ_i8",{"id":21757,"title":21758,"author":8,"body":21759,"createdAt":21788,"description":21789,"extension":1101,"img":1915,"meta":21790,"navigation":1104,"path":21791,"seo":21792,"stem":21793,"tags":21794,"updatedAt":21788,"__hash__":21795},"articles\u002Farticles\u002Fsql-server-find-sql-object-names-within-a-database.md","SQL Server Find SQL Object Names within a Database",{"type":10,"value":21760,"toc":21786},[21761,21764,21784],[16,21762,21763],{},"I was returning to an old database, and I wanted to find all instances of a particular column name.  The following SQL is a very fast way to output the object name (with additional data) for locating the item of interest.  Of course you can make more elaborate by filtering query.",[2232,21765,21767],{"className":7871,"code":21766,"language":7873,"meta":1080,"style":1080},"SELECT sc.[name] AS column_name, so.[name] , \n    FROM syscolumns sc INNER JOIN sysobjects so ON sc.id=so.id \n    WHERE sc.[name] LIKE '%TestColumnName%'\n",[2239,21768,21769,21774,21779],{"__ignoreMap":1080},[4215,21770,21771],{"class":4217,"line":4218},[4215,21772,21773],{},"SELECT sc.[name] AS column_name, so.[name] , \n",[4215,21775,21776],{"class":4217,"line":1081},[4215,21777,21778],{},"    FROM syscolumns sc INNER JOIN sysobjects so ON sc.id=so.id \n",[4215,21780,21781],{"class":4217,"line":1084},[4215,21782,21783],{},"    WHERE sc.[name] LIKE '%TestColumnName%'\n",[4682,21785,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":21787},[],"2015-04-20T08:07:17.2600000-04:00","Find SQL Object Names within a database.",{},"\u002Farticles\u002Fsql-server-find-sql-object-names-within-a-database",{"title":21758,"description":21789},"articles\u002Fsql-server-find-sql-object-names-within-a-database",[8743],"QEpNxETpmOeE4y_rIm0Sg2CxcqEoanKMzug024sdRHg",{"id":21797,"title":21798,"author":8,"body":21799,"createdAt":21863,"description":1915,"extension":1101,"img":8988,"meta":21864,"navigation":1104,"path":21865,"seo":21866,"stem":21867,"tags":21868,"updatedAt":21863,"__hash__":21869},"articles\u002Farticles\u002Fnet-3-5-sp1-how-to-tell-if-it-is-installed.md",".NET 3.5 SP1 How to tell if it is installed?",{"type":10,"value":21800,"toc":21861},[21801,21804,21810,21813,21823,21832,21835,21845,21852,21855],[16,21802,21803],{},"Ever want to know if you have 3.5 SP1 installed?  Shown below are two ways to determine.",[16,21805,21806,21807,13053],{},"1.) Take a look at ",[19,21808,21809],{},"HKLM\\SOFTWARE\\MICROSOFT\\NET Framework Setup\\NDP\\v3.5",[13,21811,21812],{},"   Shown below are two servers.  The top one does not have SP1 installed while the lower one does. ",[13,21814,21815,21817,13053],{},[1118,21816],{},[1139,21818,21819],{"href":20607},[156,21820],{"title":158,"style":15347,"height":21821,"alt":158,"src":8988,"width":21822,"border":8404},224,578,[16,21824,21825,21826,21829],{},"2.) An easy way to see if you have 3.5 SP1 installed is to navigate to ",[1139,21827],{"title":21828,"href":21828},"http:\u002F\u002Fwww.hanselman.com\u002Fsmallestdotnet\u002F",[1139,21830,21828],{"href":21828,"rel":21831},[3695],[16,21833,21834],{},"Near the top of this page you will be given an indication if you have the latest installed.  ",[13,21836,12793,21837,21844],{},[1139,21838,21840],{"href":21839},"\u002Farticles\u002Fimages\u002FNET3.5SP1Howtotellifitisinstalled_A860\u002Fimage_4.png",[156,21841],{"title":158,"style":21842,"height":12375,"alt":158,"src":15348,"width":21843,"border":8404},"border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px",362,"       ",[16,21846,21847,21848,16993],{},"If you do not have it installed you can use the following link to navigate you to Microsoft Downloads for ",[1139,21849,21851],{"href":21850,"target":1142},"http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=en","Microsoft .NET Framework 3.5 Service Pack 1",[16,21853,21854],{},"This link will install a small installer that will need to be executed.  A wizard will step you through the installation and additional downloads.",[16,21856,21857,21858,1200],{},"If you prefer a complete download of this SP1 you can use this ",[1139,21859,9452],{"href":21860,"target":1142},"http:\u002F\u002Fdownload.microsoft.com\u002Fdownload\u002F2\u002F0\u002Fe\u002F20e90413-712f-438c-988e-fdaa79a8ac3d\u002Fdotnetfx35.exe",{"title":1080,"searchDepth":1081,"depth":1081,"links":21862},[],"2015-04-20T08:07:17.0200000-04:00",{},"\u002Farticles\u002Fnet-3-5-sp1-how-to-tell-if-it-is-installed",{"title":21798,"description":1915},"articles\u002Fnet-3-5-sp1-how-to-tell-if-it-is-installed",[8526],"MC9c4Xg0ISnR8LLg7rbn5Q97cgPxY_9Pduqsos6nBgA",{"id":21871,"title":21872,"author":8,"body":21873,"createdAt":21930,"description":1915,"extension":1101,"img":21927,"meta":21931,"navigation":1104,"path":21932,"seo":21933,"stem":21934,"tags":21935,"updatedAt":21930,"__hash__":21936},"articles\u002Farticles\u002Fasp-net-4-feature-increase-the-url-character-length-plus-more.md","ASP.NET 4 Feature Increase the URL character length plus more",{"type":10,"value":21874,"toc":21928},[21875,21878,21895,21909,21919,21922],[16,21876,21877],{},"In previous versions of ASP.NET,  URLs were limited to 260 characters in length (based on the NTFS file-path limit).",[16,21879,21880,21881,21884,21885,21888,21889,21891,21892],{},"But in ASP.NET 4.0 developers have the option of increasing or decreasing  the length of URLs by using  the new ",[10696,21882,21883],{},"maxRequestPathLength","\nand ",[10696,21886,21887],{},"maxQueryStringLength",".      ",[10696,21890,21883],{}," - To allow longer or shorter paths (the portion of the URL that does not include protocol,\nserver name, and query string), modify the maxRequestPathLength attribute.     ",[19,21893,21894],{},"maxQueryStringLength - ",[16,21896,21897,21898,21900,21901,21904,21905,21908],{},"To allow longer or shorter query strings\n, modify the value of the maxQueryStringLength attribute.     For example..  \u003ChttpRuntime maxRequestPathLength=\"360\" maxQueryStringLength=\"1024\" \u002F>",[1118,21899],{},"\nASP.NET 4 also enables you to ",[19,21902,21903],{},"configure the characters that are used by the URL character check",". When ASP.NET finds an invalid character\nin the path portion of a URL, it rejects the request and issues an HTTP 400 error. In previous versions of ASP.NET, the URL character checks were limited to\na fixed set of characters. In ASP.NET 4, you can ",[19,21906,21907],{},"customize"," the set of valid characters using the new requestPathInvalidChars attribute of the\nhttpRuntime configuration element, as shown in the following example:",[16,21910,21911,21912,21914,21915,21918],{},"\u003ChttpRuntime requestPathInvalidChars=\"&lt;,&gt;,*,%,&amp;,:,,?\" \u002F>",[1118,21913],{},"\nBy default, the ",[19,21916,21917],{},"requestPathInvalidChars"," attribute defines eight characters as invalid.",[16,21920,21921],{},"(In the string that is assigned to requestPathInvalidChars by default, the less than (\u003C), greater than (>), and ampersand (&)",[16,21923,21924,21925],{},"characters are encoded, because the Web.config file is an XML file.) You can customize the set of invalid characters as needed.",[156,21926],{"src":21927,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fhair.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":21929},[],"2015-04-20T08:07:16.9200000-04:00",{},"\u002Farticles\u002Fasp-net-4-feature-increase-the-url-character-length-plus-more",{"title":21872,"description":1915},"articles\u002Fasp-net-4-feature-increase-the-url-character-length-plus-more",[8994],"7U2QWX4WIEBG_6ySWSM0ozBd780qpK3opjw_To2BOXs",{"id":21938,"title":21939,"author":8,"body":21940,"createdAt":21930,"description":22233,"extension":1101,"img":22234,"meta":22235,"navigation":1104,"path":22236,"seo":22237,"stem":22238,"tags":22239,"updatedAt":21930,"__hash__":22240},"articles\u002Farticles\u002Fasp-net-ajax-client-library-global-shortcut-list.md","ASP.NET AJAX Client Library Global Shortcut List",{"type":10,"value":21941,"toc":22231},[21942,21949,21952,21955,21965,21974,21983,22022,22031,22072,22081],[16,21943,21944],{},[4215,21945,21948],{"className":21946,"style":21947},[21106],"word-spacing: 0px; font: 13px arial; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0","Recently, Microsoft released their ASP.NET AJAX Framework which allows developers to build AJAX applications more easily.  ASP.NET AJAX consists of two pieces. ",[16,21950,21951],{},"1.) Microsoft AJAX Library - contains a set of script files that provide common functions and an OO programming framework",[16,21953,21954],{},"2.) ASP.NET 2.0 AJAX Extensions - includes a set of server controls that allows developers to add AJAX functionality by dragging and dropping controls onto a page",[16,21956,21957,21958,13053],{},"The following are brief descriptions of the javascript extensions made available by the AJAX Client Library by Namespace.  ",[4215,21959,21961,21964],{"className":21960,"style":21947},[21106],[19,21962,21963],{},"Global Namespace"," - contains members and types that extend base JavaScript objects.",[13,21966,12793,21967,11776],{},[4215,21968,21970,21973],{"className":21969,"style":21947},[21106],[19,21971,21972],{},"Array Extensions"," (add, addRange, clear, clone, contains, dequeue, enqueue, forEach, indexOf, insert, pars, remove, removeAt)",[13,21975,12793,21976,11776],{},[4215,21977,21979,21982],{"className":21978,"style":21947},[21106],[19,21980,21981],{},"Boolean ","Extension (parse - converts a string into a Boolean)",[13,21984,12793,21985],{},[4215,21986,21988,21991,21992,21994,21995,21997,21998],{"className":21987,"style":21947},[21106],[19,21989,21990],{},"Date ","Extension (format, localeFormat, parseInvariant, parseLocale)",[1118,21993],{},"\nvar today = new Date();",[1118,21996],{},"\nalert (today.format('D'));",[16,21999,22000,22001,22003,22004,22006,22007,22009,22010,22012,22013,22015,22016,22018,22019,22021],{},"d - Short date pattern (05\u002F10\u002F07)",[1118,22002],{},"\nD - Long date pattern (Thursday, 10 May 2007)",[1118,22005],{},"\nt - Short time pattern (18:05)",[1118,22008],{},"\nT - Long time pattern (18:05:12)",[1118,22011],{},"\nF- Full date pattern (Thursday, 10 May 2007 18:05:12)",[1118,22014],{},"\nM - Month and date pattern (May 10)",[1118,22017],{},"\ns - Sortable date and time pattern (2007-05-10T18:05:12)",[1118,22020],{},"\nY - Year and month pattern (2007 May) ",[13,22023,12793,22024,11776],{},[4215,22025,22027,22030],{"className":22026,"style":21947},[21106],[19,22028,22029],{},"Error Extensions"," (argument, argumentNull, argumentOutOfRange, argumentType, argumentUndefined, create, invalidOperation, notImplemented, parameterCount, popStackFrame)",[13,22032,12793,22033,11983,22040],{},[4215,22034,22036,22039],{"className":22035,"style":21947},[21106],[19,22037,22038],{},"Number Extension"," (format, localeFormat, parseInvariant, parseLocale)",[4215,22041,22043,22044,22046,22047,22049,22050,22052,22053],{"className":22042,"style":21947},[21106],"        p - number is converted to a string that represents a percent",[1118,22045],{},"\nd - converted to a string of decimal digits",[1118,22048],{},"\nc - converted to a string that represents a currency",[1118,22051],{},"\nn - converted to a string of the form \"-d,ddd,dd\"",[16,22054,22055,22056,22058,22059,11776],{},"var num = Number.parseInvariant(\"130.33\");",[1118,22057],{},"\nalert (num.localeFormat(\"c\")); \u002F\u002F $130.33    ",[4215,22060,22062,22065,22066,22068,22069,22071],{"className":22061,"style":21947},[21106],[19,22063,22064],{},"Object Extensions"," (getType, getTypeName)",[1118,22067],{},"\ngetType - returns the type of specified object",[1118,22070],{},"\ngetTypeName - returns the type name of an object",[13,22073,12793,22074,11776],{},[4215,22075,22077,22080],{"className":22076,"style":21947},[21106],[19,22078,22079],{},"String Extension"," (endsWith, format, localeFormat, startsWith, trim, trimEnd, trimStart)",[4215,22082,22084,22090,22124,22142,22143],{"className":22083,"style":21947},[21106],[19,22085,22086,11776],{},[1139,22087,22089],{"href":22088,"target":1142},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fbb397536.aspx","Sys Namespace",[16,22091,22092,22093,22095,22096,22098,22099,22101,22102,22104,22105,22107,22108,22110,22111,22113,22114,22116,22117,22119,22120],{},"Sys - root namespace containing some base classes such as Sys.CultureInfo",[1118,22094],{},"\nApplication - objects\u002Fmethods that expose client events and manage client components",[1118,22097],{},"\nApplicationLoadEventArgs - container object for arguments of the Application Load event",[1118,22100],{},"\nCancelEventArgs - base class for events that can be canceled",[1118,22103],{},"\nComponent - base class for all asp.net ajax objects including Control class and Behavior class",[1118,22106],{},"\nCultureInfo - object that can be used to provide locale specific functionality",[1118,22109],{},"\nDebug code - debugging and tracing functionality",[1118,22112],{},"\nEventArgs - used for storing event arguments",[1118,22115],{},"\nEventHandlerList - collection of client events for a component containing event names and handlers\nPropertyChangedEventArgs - contains event arguments associated with changed properties",[1118,22118],{},"\nStringBuilder - facilitates more efficient ",[1139,22121,22123],{"href":22122,"target":1142},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fbb310852.aspx","string concatenation",[16,22125,22126,22127,22129,22130,22132,22133,22135,22136,22138,22139,22141],{},"Sys.Net - provides networking and communication support",[1118,22128],{},"\nSys.UI - contains set of classes for UI support",[1118,22131],{},"\nSys.Services - support for asp.net application services such as login\u002Fauthentication",[1118,22134],{},"\nSys.Serialization - provides support for data serialization\u002FJson",[1118,22137],{},"\nSys.WebForms - contains classes for async page loading",[1118,22140],{},"\n  ","                                                                                                                                                                                                                                                                      ",[2014,22144,22146],{"cellSpacing":13084,"cellPadding":13084,"width":22145,"border":8404},748,[2037,22147,22148,22163,22171,22179,22187,22195,22203,22211,22219,22225],{},[2020,22149,22150,22157],{},[2042,22151,22154],{"vAlign":22152,"width":22153},"top",145,[19,22155,22156],{},"Shortcut",[2042,22158,22160],{"vAlign":22152,"width":22159},601,[19,22161,22162],{},"Description",[2020,22164,22165,22168],{},[2042,22166,22167],{"vAlign":22152,"width":22153},"$addHandler",[2042,22169,22170],{"vAlign":22152,"width":22159},"Shortcut to Sys.UI.DomEvent.addHandler method",[2020,22172,22173,22176],{},[2042,22174,22175],{"vAlign":22152,"width":22153},"$addHandlers",[2042,22177,22178],{"vAlign":22152,"width":22159},"Shortcut to Sys.UI.DomEvent.addHandlers method ",[2020,22180,22181,22184],{},[2042,22182,22183],{"vAlign":22152,"width":22153},"$clearHandlers",[2042,22185,22186],{"vAlign":22152,"width":22159},"Shortcut to Sys.UI.DomEvent.clearHandlers method",[2020,22188,22189,22192],{},[2042,22190,22191],{"vAlign":22152,"width":22153},"$create",[2042,22193,22194],{"vAlign":22152,"width":22159},"Shortcut to Sys.Component.create method",[2020,22196,22197,22200],{},[2042,22198,22199],{"vAlign":22152,"width":22153},"$find",[2042,22201,22202],{"vAlign":22152,"width":22159},"Shortcut to Sys.Application.findComponent method",[2020,22204,22205,22208],{},[2042,22206,22207],{"vAlign":22152,"width":22153},"$get",[2042,22209,22210],{"vAlign":22152,"width":22159},"Shortcut to Sys.UI.DomElement.getElementId method",[2020,22212,22213,22216],{},[2042,22214,22215],{"vAlign":22152,"width":22153},"$removeHandler",[2042,22217,22218],{"vAlign":22152,"width":22159},"Shortcut to System.UI.DomEvent.removeHandler method",[2020,22220,22221,22223],{},[2042,22222,8422],{"vAlign":22152,"width":22153},[2042,22224,8422],{"vAlign":22152,"width":22159},[2020,22226,22227,22229],{},[2042,22228,8422],{"vAlign":22152,"width":22153},[2042,22230,8422],{"vAlign":22152,"width":22159},{"title":1080,"searchDepth":1081,"depth":1081,"links":22232},[],"The following are brief descriptions of the javascript extensions made available by the AJAX Client Library by Namespace","\u002Farticles\u002Fimages\u002FfB5BBkL2by.png",{},"\u002Farticles\u002Fasp-net-ajax-client-library-global-shortcut-list",{"title":21939,"description":22233},"articles\u002Fasp-net-ajax-client-library-global-shortcut-list",[5166],"WhenAc5IArfx2XOO9yOgZabko6SX3dvPL2yA13Q5O50",{"id":22242,"title":22243,"author":8,"body":22244,"createdAt":21930,"description":1915,"extension":1101,"img":1915,"meta":22272,"navigation":1104,"path":22273,"seo":22274,"stem":22275,"tags":22276,"updatedAt":21930,"__hash__":22277},"articles\u002Farticles\u002Fcannot-resolve-collation-conflict.md","Cannot Resolve Collation Conflict",{"type":10,"value":22245,"toc":22270},[22246,22249,22252,22255,22258,22264,22267],[16,22247,22248],{},"“Cannot resolve collation conflict for equal to operation” – huh?",[16,22250,22251],{},"When joining fields in different collated databases you can see the above error message. ",[16,22253,22254],{},"In my particular case I had two databases with different collations and I was doing a join across the databases on the fields.",[16,22256,22257],{},"The resolution was to add the keywords",[16,22259,22260,22261,22263],{},"“COLLATE DATABASE_DEFAULT” near the equal ‘=’ signs.  For example:                          SELECT p1.BEEF_1 FROM dbo.PHEN p1 INNER JOIN \nDatabase2.dbo.PHEN p2 ON p1.BEEF_1 COLLATE DATABASE_DEFAULT =p2.BEEF_1 COLLATE DATABASE_DEFAULT AND",[1118,22262],{},"\np1.BEEF_2 COLLATE DATABASE_DEFAULT=p2.BEEF_2 COLLATE DATABASE_DEFAULT            Collation can affect where clauses, join predicates, functions and databases.",[16,22265,22266],{},"More about Collation  A Collation encodes the rules governing the proper use of characters for either a language,\nsuch as Greek or Polish or an alphabet such as Latin1_General (the Latin alphabet used by western European languages).",[16,22268,22269],{},"Each SQL Server collation specifies three properties: sort order for Unicode data types (nchar, nvarchar, ntext), the sort order for non-Unicode character types\n(char, varchar and text) and finally the code page used to store non-Unicode character data.  A SQL Server collation defines how the database engine stores and\noperates on character and Unicode data.",{"title":1080,"searchDepth":1081,"depth":1081,"links":22271},[],{},"\u002Farticles\u002Fcannot-resolve-collation-conflict",{"title":22243,"description":1915},"articles\u002Fcannot-resolve-collation-conflict",[8743],"18hrmGHKYf7WtDSCubhBbJSReXrd9i7CyaWJs-LwY0Q",{"id":22279,"title":22280,"author":8,"body":22281,"createdAt":21930,"description":1915,"extension":1101,"img":22406,"meta":22409,"navigation":1104,"path":22410,"seo":22411,"stem":22412,"tags":22413,"updatedAt":21930,"__hash__":22414},"articles\u002Farticles\u002Fdesign-guidelines-classes-vs-interfaces.md","Design Guidelines–Classes vs. Interfaces",{"type":10,"value":22282,"toc":22407},[22283,22301,22325,22337,22348,22360,22366,22372,22377,22383,22396,22399,22404],[16,22284,22285,22286,22288,22290,22292,22293,22296,22297,22300],{},"This is 2nd in a series of articles on .NET design practices.  This article concentrates on classes and interfaces and how they differ and how\u002Fwhen to implement.",[1118,22287],{},[19,22289],{},[1118,22291],{},"\nAn ",[19,22294,22295],{},"interface"," defines the signatures for a set of members that implementers must provide.  Interfaces ",[19,22298,22299],{},"cannot"," provide implementation details for the members.  Interfaces provide definitions for events, indexers, methods and\u002For properties.  Interfaces are inherited by classes and structures which must provide an implementation for each interfaces’ members.  The Interface doesn't actually do anything but only has a signature for interaction with other classes or interfaces.",[16,22302,22303,22304,22307,22308,14501,22310,14501,22312,22314,22315,14501,22317,14501,22319,22321,22324],{},"By convention interfaces are prefixed with a capital “I”.  Interfaces differ from abstract classes in that they only define the member definitions (never the implementations).  Interfaces are good ",[19,22305,22306],{},"for designing components that are interchangeable ","as they all expose specific public members in a consistent manner.  This is key to understanding the value of interfaces.  The ability to have a series of components with similar properties and methods (aka. contracts) promotes consistency and information to the developer.",[1118,22309],{},[1118,22311],{},[1118,22313],{},"\nInterfaces may also be inherited by other interfaces and any class or structure that implements an interface much implement all members in an entire interface inheritance chain.  Interfaces in C# are provided as a replacement of multiple inheritance. Because C# does not support multiple inheritance, it was necessary to incorporate some other method so that the class can inherit the behavior of more than one class.",[1118,22316],{},[1118,22318],{},[1118,22320],{},[19,22322,22323],{},"Danger, Danger: ","If the interfaces are poorly designed and have to change (add functionality) after they have been deployed it WILL cause cascading breaks in existing classes that have implemented them.  As such, interfaces need to be carefully designed.  Alternatives to the interface approach is utilizing abstract classes.   Similarly, modifications to abstract classes can have have breaking issues of derived classes if care is not taken.  Interfaces vs. Abstract classes will be covered in a future article but note that both have things we need to watch for when making modifications. ",[16,22326,22327,22328,22330,22331,22333,22334,22336],{},"Interfaces however are contracts that the developer is keenly aware of and as such he\u002Fshe knows that they cannot change and so just the existence of the interface ensures that everyone is aware of how consistent they must be maintained.  In this essence the usage of an interface establishes a consistent contract (methods and properties) that will not be changed.",[1118,22329],{},"\nRemember, an interface tells a class that another class implements all the methods contained in an interface, therefore, you do not have to know what type of object it is, only that it implements the interface.  With interfaces we are moving away from considering classes in terms of what they are, and starting to think about them in terms of what they can do.",[1118,22332],{},"\nSo, interfaces are good for establishing similarities between unrelated classes without locking in relationships between classes.  As such they declare methods that one or more classes (of different types) are expected to implement.  Interfaces are similar to base classes in that they provide structure to other derived classes and both can be used for polymorphism.",[1118,22335],{},"\nInterfaces are different than base classes in that:",[48,22338,22339,22342,22345],{},[51,22340,22341],{},"A class can inherit only one base class, but it can implement many interfaces",[51,22343,22344],{},"A base class can contain implementation, an interface cannot",[51,22346,22347],{},"Interfaces can only contain Methods, Properties, Indexers, and Events. They cannot contain fields or constants (which are used for implementation)",[16,22349,8422,22350,14501,22352,22354,11776,22357],{},[1118,22351],{},[1118,22353],{},[19,22355,22356],{},"Classes vs. Interfaces",[19,22358,22359],{},"Guidelines",[16,22361,22362,22365],{},[19,22363,22364],{},"Classes ","define both member signatures and implementation details for each member. Abstract (MustInherit in Visual Basic) classes can behave like interfaces or regular classes in that they can define members, and they can provide implementation details but are not required to do so. If an abstract class does not provide implementation details, concrete classes that inherit from the abstract class are required to provide the implementation.",[16,22367,22368,22369,22371],{},"While both abstract classes and interfaces support separating contract from implementation, interfaces cannot specify new members in later versions while abstract classes can add members as needed to support additional functionality.",[1118,22370],{},"\nDo favor defining classes over interfaces.",[48,22373,22374],{},[51,22375,22376],{},"In later versions of your library, you can safely add new members to classes; you cannot add members to interfaces without breaking existing code.",[16,22378,22379,22380,22382],{},"Do use abstract (MustInherit in Visual Basic) classes instead of interfaces to decouple the contract from implementations.",[1118,22381],{},"\nDo define an interface if you need to provide a polymorphic hierarchy of value types.",[48,22384,22385],{},[51,22386,22387,22388,22392,22393,22395],{},"Value types must inherit from ",[1139,22389,22391],{"href":22390},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fsystem.valuetype.aspx","ValueType",", and can inherit only from ",[1139,22394,22391],{"href":22390},", so they cannot use classes to separate contract and implementation. In this case, you must use an interface if your value types require polymorphic behavior.",[16,22397,22398],{},"Consider defining interfaces to achieve an effect similar to that of multiple inheritance.",[48,22400,22401],{},[51,22402,22403],{},"If a type must implement multiple contracts, or the contract is applicable to a wide variety of types, use an interface.",[156,22405],{"style":15306,"src":22406,"alt":1080},"\u002Farticles\u002Fimages\u002Fsuitcase-bike.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":22408},[],{},"\u002Farticles\u002Fdesign-guidelines-classes-vs-interfaces",{"title":22280,"description":1915},"articles\u002Fdesign-guidelines-classes-vs-interfaces",[8723],"3GlliBf0u8RxG37mIAwxdeuY3tHvxAAN16QHnerYJrk",{"id":22416,"title":22417,"author":8,"body":22418,"createdAt":21930,"description":1915,"extension":1101,"img":1915,"meta":22435,"navigation":1104,"path":22436,"seo":22437,"stem":22438,"tags":22439,"updatedAt":21930,"__hash__":22440},"articles\u002Farticles\u002Fdetermine-sharepoint-site-master-page-in-use.md","Determine SharePoint Site Master Page (in use)",{"type":10,"value":22419,"toc":22433},[22420,22423,22430],[16,22421,22422],{},"Where to change the master page?     Well, if you don’t have the Publishing feature activated navigate\nto",[16,22424,22425,22428,14501],{},[1139,22426,22427],{"href":22427},"http:\u002F\u002Fyour_server\u002Fsites\u002Fexamples\u002F_Layouts\u002FChangeSiteMasterPage.aspx",[1118,22429],{},[16,22431,22432],{},"If you do have the Publishing feature enabled you can go to Master Page on the Site Settings page, under Look and Feel category.",{"title":1080,"searchDepth":1081,"depth":1081,"links":22434},[],{},"\u002Farticles\u002Fdetermine-sharepoint-site-master-page-in-use",{"title":22417,"description":1915},"articles\u002Fdetermine-sharepoint-site-master-page-in-use",[15562],"KoxFTdAecJ_3-UaaVIfPKuSarqQLbJypID67sC3-QqQ",{"id":22442,"title":22443,"author":8,"body":22444,"createdAt":21930,"description":1915,"extension":1101,"img":22968,"meta":22969,"navigation":1104,"path":22970,"seo":22971,"stem":22972,"tags":22973,"updatedAt":21930,"__hash__":22975},"articles\u002Farticles\u002Fselect2-and-knockout-binding.md","Select2 and Knockout Binding",{"type":10,"value":22445,"toc":22966},[22446,22462,22699,22706,22963],[16,22447,22448,22449,22453,22454,14501,22456,22458,22459,22461],{},"If using ",[1139,22450,22452],{"href":22451},"http:\u002F\u002Fivaynberg.github.io\u002Fselect2\u002F","Select2 ","and Knockout, you have the following options for hooking up to html elements. In both of these cases my viewmodel has a property called EvaluatorList with collection object properties of DisplayName and Code.",[1118,22455],{},[1118,22457],{},"\n1.) Manual",[1118,22460],{},"\nJavaScript looking like",[2232,22463,22465],{"className":5164,"code":22464,"language":5166,"meta":1080,"style":1080},"        $(\"#txtEvaluator\").select2({  \n            placeholder: 'Evaluator',  \n            multiple:true,  \n            allowClear: true,  \n            id: function (e) { return e.Code },  \n            data: { results: ko.toJS(viewModel.EvaluatorList()), text: 'DisplayName' },  \n            formatSelection: function (item) { return item.DisplayName; },  \n            formatResult: function (item) { return item.DisplayName; }  \n        }).on(\"select2-selecting\", function (e) {  \n            $('#txtEvaluatorId').val(e.val).change();  \n        }).on(\"select2-removed\", function (e) {  \n            $('#txtEvaluatorId').val('').change();  \n        });  \n",[2239,22466,22467,22485,22496,22505,22514,22538,22561,22582,22602,22626,22650,22671,22694],{"__ignoreMap":1080},[4215,22468,22469,22472,22474,22477,22479,22482],{"class":4217,"line":4218},[4215,22470,22471],{"class":4666},"        $",[4215,22473,14616],{"class":8259},[4215,22475,22476],{"class":4669},"\"#txtEvaluator\"",[4215,22478,1989],{"class":8259},[4215,22480,22481],{"class":4666},"select2",[4215,22483,22484],{"class":8259},"({  \n",[4215,22486,22487,22490,22493],{"class":4217,"line":1081},[4215,22488,22489],{"class":8259},"            placeholder: ",[4215,22491,22492],{"class":4669},"'Evaluator'",[4215,22494,22495],{"class":8259},",  \n",[4215,22497,22498,22501,22503],{"class":4217,"line":1084},[4215,22499,22500],{"class":8259},"            multiple:",[4215,22502,15236],{"class":8255},[4215,22504,22495],{"class":8259},[4215,22506,22507,22510,22512],{"class":4217,"line":4234},[4215,22508,22509],{"class":8259},"            allowClear: ",[4215,22511,15236],{"class":8255},[4215,22513,22495],{"class":8259},[4215,22515,22516,22519,22521,22524,22526,22530,22533,22535],{"class":4217,"line":4240},[4215,22517,22518],{"class":4666},"            id",[4215,22520,3087],{"class":8259},[4215,22522,22523],{"class":8265},"function",[4215,22525,15468],{"class":8259},[4215,22527,22529],{"class":22528},"s4XuR","e",[4215,22531,22532],{"class":8259},") { ",[4215,22534,15052],{"class":8265},[4215,22536,22537],{"class":8259}," e.Code },  \n",[4215,22539,22540,22543,22546,22549,22552,22555,22558],{"class":4217,"line":4246},[4215,22541,22542],{"class":8259},"            data: { results: ko.",[4215,22544,22545],{"class":4666},"toJS",[4215,22547,22548],{"class":8259},"(viewModel.",[4215,22550,22551],{"class":4666},"EvaluatorList",[4215,22553,22554],{"class":8259},"()), text: ",[4215,22556,22557],{"class":4669},"'DisplayName'",[4215,22559,22560],{"class":8259}," },  \n",[4215,22562,22563,22566,22568,22570,22572,22575,22577,22579],{"class":4217,"line":4252},[4215,22564,22565],{"class":4666},"            formatSelection",[4215,22567,3087],{"class":8259},[4215,22569,22523],{"class":8265},[4215,22571,15468],{"class":8259},[4215,22573,22574],{"class":22528},"item",[4215,22576,22532],{"class":8259},[4215,22578,15052],{"class":8265},[4215,22580,22581],{"class":8259}," item.DisplayName; },  \n",[4215,22583,22584,22587,22589,22591,22593,22595,22597,22599],{"class":4217,"line":4258},[4215,22585,22586],{"class":4666},"            formatResult",[4215,22588,3087],{"class":8259},[4215,22590,22523],{"class":8265},[4215,22592,15468],{"class":8259},[4215,22594,22574],{"class":22528},[4215,22596,22532],{"class":8259},[4215,22598,15052],{"class":8265},[4215,22600,22601],{"class":8259}," item.DisplayName; }  \n",[4215,22603,22604,22607,22610,22612,22615,22617,22619,22621,22623],{"class":4217,"line":4264},[4215,22605,22606],{"class":8259},"        }).",[4215,22608,22609],{"class":4666},"on",[4215,22611,14616],{"class":8259},[4215,22613,22614],{"class":4669},"\"select2-selecting\"",[4215,22616,3091],{"class":8259},[4215,22618,22523],{"class":8265},[4215,22620,15468],{"class":8259},[4215,22622,22529],{"class":22528},[4215,22624,22625],{"class":8259},") {  \n",[4215,22627,22628,22631,22633,22636,22638,22641,22644,22647],{"class":4217,"line":4270},[4215,22629,22630],{"class":4666},"            $",[4215,22632,14616],{"class":8259},[4215,22634,22635],{"class":4669},"'#txtEvaluatorId'",[4215,22637,1989],{"class":8259},[4215,22639,22640],{"class":4666},"val",[4215,22642,22643],{"class":8259},"(e.val).",[4215,22645,22646],{"class":4666},"change",[4215,22648,22649],{"class":8259},"();  \n",[4215,22651,22652,22654,22656,22658,22661,22663,22665,22667,22669],{"class":4217,"line":4276},[4215,22653,22606],{"class":8259},[4215,22655,22609],{"class":4666},[4215,22657,14616],{"class":8259},[4215,22659,22660],{"class":4669},"\"select2-removed\"",[4215,22662,3091],{"class":8259},[4215,22664,22523],{"class":8265},[4215,22666,15468],{"class":8259},[4215,22668,22529],{"class":22528},[4215,22670,22625],{"class":8259},[4215,22672,22673,22675,22677,22679,22681,22683,22685,22688,22690,22692],{"class":4217,"line":4282},[4215,22674,22630],{"class":4666},[4215,22676,14616],{"class":8259},[4215,22678,22635],{"class":4669},[4215,22680,1989],{"class":8259},[4215,22682,22640],{"class":4666},[4215,22684,14616],{"class":8259},[4215,22686,22687],{"class":4669},"''",[4215,22689,1989],{"class":8259},[4215,22691,22646],{"class":4666},[4215,22693,22649],{"class":8259},[4215,22695,22696],{"class":4217,"line":4288},[4215,22697,22698],{"class":8259},"        });\n",[16,22700,22701,22702],{},"Option 2) Using ",[1139,22703,22705],{"href":22704},"\u002Fblog\u002Fpost\u002F2014\u002F01\u002F20\u002FSelect2-and-Knockout-Binding.aspx","binding handler",[2232,22707,22709],{"className":5164,"code":22708,"language":5166,"meta":1080,"style":1080},"ko.bindingHandlers.select2 = {  \n    init: function (element, valueAccessor, allBindingsAccessor) {  \n        var obj = valueAccessor(),  \n            allBindings = allBindingsAccessor(),  \n            lookupKey = allBindings.lookupKey;  \n        $(element).select2(obj);  \n        if (lookupKey) {  \n            var value = ko.utils.unwrapObservable(allBindings.value);  \n            $(element).select2('data', ko.utils.arrayFirst(obj.data.results, function (item) {  \n                return item[lookupKey] === value;  \n            }));  \n        }  \n  \n        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {  \n            $(element).select2('destroy');  \n        });  \n    },  \n    update: function (element) {  \n        $(element).trigger('change');  \n    }  \n};  \n",[2239,22710,22711,22721,22747,22763,22775,22785,22797,22805,22824,22854,22868,22873,22878,22882,22898,22914,22919,22924,22939,22955,22959],{"__ignoreMap":1080},[4215,22712,22713,22716,22718],{"class":4217,"line":4218},[4215,22714,22715],{"class":8259},"ko.bindingHandlers.select2 ",[4215,22717,8807],{"class":8265},[4215,22719,22720],{"class":8259}," {  \n",[4215,22722,22723,22726,22728,22730,22732,22735,22737,22740,22742,22745],{"class":4217,"line":1081},[4215,22724,22725],{"class":4666},"    init",[4215,22727,3087],{"class":8259},[4215,22729,22523],{"class":8265},[4215,22731,15468],{"class":8259},[4215,22733,22734],{"class":22528},"element",[4215,22736,3091],{"class":8259},[4215,22738,22739],{"class":22528},"valueAccessor",[4215,22741,3091],{"class":8259},[4215,22743,22744],{"class":22528},"allBindingsAccessor",[4215,22746,22625],{"class":8259},[4215,22748,22749,22752,22755,22757,22760],{"class":4217,"line":1084},[4215,22750,22751],{"class":8265},"        var",[4215,22753,22754],{"class":8259}," obj ",[4215,22756,8807],{"class":8265},[4215,22758,22759],{"class":4666}," valueAccessor",[4215,22761,22762],{"class":8259},"(),  \n",[4215,22764,22765,22768,22770,22773],{"class":4217,"line":4234},[4215,22766,22767],{"class":8259},"            allBindings ",[4215,22769,8807],{"class":8265},[4215,22771,22772],{"class":4666}," allBindingsAccessor",[4215,22774,22762],{"class":8259},[4215,22776,22777,22780,22782],{"class":4217,"line":4240},[4215,22778,22779],{"class":8259},"            lookupKey ",[4215,22781,8807],{"class":8265},[4215,22783,22784],{"class":8259}," allBindings.lookupKey;  \n",[4215,22786,22787,22789,22792,22794],{"class":4217,"line":4246},[4215,22788,22471],{"class":4666},[4215,22790,22791],{"class":8259},"(element).",[4215,22793,22481],{"class":4666},[4215,22795,22796],{"class":8259},"(obj);  \n",[4215,22798,22799,22802],{"class":4217,"line":4252},[4215,22800,22801],{"class":8265},"        if",[4215,22803,22804],{"class":8259}," (lookupKey) {  \n",[4215,22806,22807,22810,22813,22815,22818,22821],{"class":4217,"line":4258},[4215,22808,22809],{"class":8265},"            var",[4215,22811,22812],{"class":8259}," value ",[4215,22814,8807],{"class":8265},[4215,22816,22817],{"class":8259}," ko.utils.",[4215,22819,22820],{"class":4666},"unwrapObservable",[4215,22822,22823],{"class":8259},"(allBindings.value);  \n",[4215,22825,22826,22828,22830,22832,22834,22837,22840,22843,22846,22848,22850,22852],{"class":4217,"line":4264},[4215,22827,22630],{"class":4666},[4215,22829,22791],{"class":8259},[4215,22831,22481],{"class":4666},[4215,22833,14616],{"class":8259},[4215,22835,22836],{"class":4669},"'data'",[4215,22838,22839],{"class":8259},", ko.utils.",[4215,22841,22842],{"class":4666},"arrayFirst",[4215,22844,22845],{"class":8259},"(obj.data.results, ",[4215,22847,22523],{"class":8265},[4215,22849,15468],{"class":8259},[4215,22851,22574],{"class":22528},[4215,22853,22625],{"class":8259},[4215,22855,22856,22859,22862,22865],{"class":4217,"line":4270},[4215,22857,22858],{"class":8265},"                return",[4215,22860,22861],{"class":8259}," item[lookupKey] ",[4215,22863,22864],{"class":8265},"===",[4215,22866,22867],{"class":8259}," value;  \n",[4215,22869,22870],{"class":4217,"line":4276},[4215,22871,22872],{"class":8259},"            }));  \n",[4215,22874,22875],{"class":4217,"line":4282},[4215,22876,22877],{"class":8259},"        }  \n",[4215,22879,22880],{"class":4217,"line":4288},[4215,22881,10274],{"class":8259},[4215,22883,22884,22887,22890,22893,22895],{"class":4217,"line":4294},[4215,22885,22886],{"class":8259},"        ko.utils.domNodeDisposal.",[4215,22888,22889],{"class":4666},"addDisposeCallback",[4215,22891,22892],{"class":8259},"(element, ",[4215,22894,22523],{"class":8265},[4215,22896,22897],{"class":8259}," () {  \n",[4215,22899,22900,22902,22904,22906,22908,22911],{"class":4217,"line":4300},[4215,22901,22630],{"class":4666},[4215,22903,22791],{"class":8259},[4215,22905,22481],{"class":4666},[4215,22907,14616],{"class":8259},[4215,22909,22910],{"class":4669},"'destroy'",[4215,22912,22913],{"class":8259},");  \n",[4215,22915,22916],{"class":4217,"line":4306},[4215,22917,22918],{"class":8259},"        });  \n",[4215,22920,22921],{"class":4217,"line":4312},[4215,22922,22923],{"class":8259},"    },  \n",[4215,22925,22926,22929,22931,22933,22935,22937],{"class":4217,"line":4318},[4215,22927,22928],{"class":4666},"    update",[4215,22930,3087],{"class":8259},[4215,22932,22523],{"class":8265},[4215,22934,15468],{"class":8259},[4215,22936,22734],{"class":22528},[4215,22938,22625],{"class":8259},[4215,22940,22941,22943,22945,22948,22950,22953],{"class":4217,"line":4324},[4215,22942,22471],{"class":4666},[4215,22944,22791],{"class":8259},[4215,22946,22947],{"class":4666},"trigger",[4215,22949,14616],{"class":8259},[4215,22951,22952],{"class":4669},"'change'",[4215,22954,22913],{"class":8259},[4215,22956,22957],{"class":4217,"line":4330},[4215,22958,11671],{"class":8259},[4215,22960,22961],{"class":4217,"line":4336},[4215,22962,5202],{"class":8259},[4682,22964,22965],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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":1080,"searchDepth":1081,"depth":1081,"links":22967},[],"\u002Farticles\u002Fimages\u002Fko.jpg",{},"\u002Farticles\u002Fselect2-and-knockout-binding",{"title":22443,"description":1915},"articles\u002Fselect2-and-knockout-binding",[8994,8650,5166,22974],"knockout","IAV-2N-X-tExH1G5PlY5R0oGGOGSG-lUgmlyANRbjsM",{"id":22977,"title":22978,"author":8,"body":22979,"createdAt":21930,"description":1915,"extension":1101,"img":22994,"meta":22997,"navigation":1104,"path":22998,"seo":22999,"stem":23000,"tags":23001,"updatedAt":21930,"__hash__":23002},"articles\u002Farticles\u002Fsharepoint-2010-iterating-sites-com-factory-error.md","SharePoint 2010 Iterating Sites–COM Factory Error",{"type":10,"value":22980,"toc":22995},[22981,22984,22987],[16,22982,22983],{},"Platform: Windows 7, 64 bit, .NET 4 Windows App\u002FConsole App     Error: Retrieving the COM class factory for\ncomponent with CLSID {BDEADF26-C265-11D0-BCED-00A0C90AB50F} failed due to the following error: 80040154 Class not\nregistered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).   ",[16,22985,22986],{},"Solution: Your debug configuration must use x64 as its active solution platform.",[16,22988,22989,22990,22992],{},"Otherwise you're going to get a very non-intuitive message like that shown above.  You can change this by picking Configuration\nManager from the Build menu or from the Solution Configurations drop down menu in your toolbar. Make sure the Active Solution Platform is not x86.",[1118,22991],{},[156,22993],{"src":22994,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Ferror.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":22996},[],{},"\u002Farticles\u002Fsharepoint-2010-iterating-sites-com-factory-error",{"title":22978,"description":1915},"articles\u002Fsharepoint-2010-iterating-sites-com-factory-error",[15562],"BsSgOHf3cn3e90uu93Lgc55IUUa_cRQha4xY_nFeEkc",{"id":23004,"title":23005,"author":8,"body":23006,"createdAt":21930,"description":23051,"extension":1101,"img":23052,"meta":23053,"navigation":1104,"path":23054,"seo":23055,"stem":23056,"tags":23057,"updatedAt":21930,"__hash__":23058},"articles\u002Farticles\u002Fsql-server-and-find-all-columns-in-a-database.md","SQL Server and Find all Columns in a Database",{"type":10,"value":23007,"toc":23049},[23008,23011,23041,23047],[16,23009,23010],{},"Where the column name matches exactly…",[2232,23012,23014],{"className":7871,"code":23013,"language":7873,"meta":1080,"style":1080},"SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns\nWHERE name = '{text}' )\nWhere the column name is like…\nSELECT name FROM sysobjects WHERE id IN \n    ( SELECT id FROM syscolumns WHERE name like '%{text}%' )  \n",[2239,23015,23016,23021,23026,23031,23036],{"__ignoreMap":1080},[4215,23017,23018],{"class":4217,"line":4218},[4215,23019,23020],{},"SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns\n",[4215,23022,23023],{"class":4217,"line":1081},[4215,23024,23025],{},"WHERE name = '{text}' )\n",[4215,23027,23028],{"class":4217,"line":1084},[4215,23029,23030],{},"Where the column name is like…\n",[4215,23032,23033],{"class":4217,"line":4234},[4215,23034,23035],{},"SELECT name FROM sysobjects WHERE id IN \n",[4215,23037,23038],{"class":4217,"line":4240},[4215,23039,23040],{},"    ( SELECT id FROM syscolumns WHERE name like '%{text}%' )\n",[16,23042,23043,23044,23046],{},"The following will show all occurrences of the column in any object",[1118,23045],{},"\nSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%doctorid%'",[4682,23048,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":23050},[],"Find all occurrences of the column in any object.","\u002Farticles\u002Fimages\u002F01dQC8VR9Q.png",{},"\u002Farticles\u002Fsql-server-and-find-all-columns-in-a-database",{"title":23005,"description":23051},"articles\u002Fsql-server-and-find-all-columns-in-a-database",[7873],"7j7MoIgvvTBgGhiyTLQS8O1mSrOntcrI4ggv0hVclEs",{"id":23060,"title":23061,"author":8,"body":23062,"createdAt":23165,"description":23166,"extension":1101,"img":1915,"meta":23167,"navigation":1104,"path":23168,"seo":23169,"stem":23170,"tags":23171,"updatedAt":23165,"__hash__":23172},"articles\u002Farticles\u002Fsql-server-comparing-tables-merge-except-intersect.md","SQL Server Comparing Tables",{"type":10,"value":23063,"toc":23163},[23064,23067,23095,23105,23116,23119,23125,23128,23158,23161],[16,23065,23066],{},"I had a need to compare two SQL Server table for differences between them. \nI started using .NET dataset features (merge, acceptchanges, getchanges) as follows: ",[9636,23068,23069,23070,23073,23074,23077,23078,23080,23081,23084,23085,23087,23088,11776,23091,23094],{"style":21255},"\n        ",[4215,23071,23072],{"style":14600},"Dim"," data1 DataSet = ",[4215,23075,23076],{"style":14600},"GetData1()","          ",[4215,23079,23072],{"style":14600}," data2 DataSet = ",[4215,23082,23083],{"style":14600},"GetData2()","            ",[4215,23086,23072],{"style":14600}," ds ",[4215,23089,23090],{"style":14600},"As",[4215,23092,23093],{"style":14600},"New"," DataSet         ds.Merge(data1)         ds.AcceptChanges()         ds.Merge(data2)         ds.GetChanges(DataRowState.Modified)",[16,23096,23097,23098,23101,23104],{},"There are a few gotcha's with the above code.  The primary problem was that\nboth tables must have primary keys defined.  I figured ok,\nI could create primary keys through code for the related DataTables however\nI soon realized that there were duplicate rows within the tables. SQL Server\n2005 has Except and Intersect functions (",[1139,23099],{"title":23100,"href":23100},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fms188055(SQL.90).aspx",[1139,23102,23100],{"href":23100,"rel":23103},[3695],") that return distinct values by comparing the results of two queries.  The entire row is compared against another row from another table.",[16,23106,23107,23108,23111,23112,23115],{},"Except returns any distinct values from the left query that are not found on the right query.\nIntersect returns any distinct values that are returned by ",[19,23109,23110],{},"both"," the query on the left and right sides. In order to use the number and order\nof the columns must be the same in the queries and also the data types must be comparable.   To return all rows in table1 that do not match exactly the rows\nin table2, you can use Except ...\nselect * from table1 ",[19,23113,23114],{},"except"," select * from table2",[16,23117,23118],{},"(likewise to find the opposite just reverse the table names above)",[16,23120,23121,23122,23115],{},"To return all rows in table1 that match exactly what is in table2, using Intersect...\nselect * from table1 ",[19,23123,23124],{},"intersect",[16,23126,23127],{},"Combining the above two... (the following will return the differences)",[2232,23129,23131],{"className":7871,"code":23130,"language":7873,"meta":1080,"style":1080},"select 'table1' as tblName, *  from\n  (select * from Table1 except select * from Table2) x\nunion all\nselect 'table2' as tblName, *  from\n  (select * from Table2 except select *  from Table1 ) x\n",[2239,23132,23133,23138,23143,23148,23153],{"__ignoreMap":1080},[4215,23134,23135],{"class":4217,"line":4218},[4215,23136,23137],{},"select 'table1' as tblName, *  from\n",[4215,23139,23140],{"class":4217,"line":1081},[4215,23141,23142],{},"  (select * from Table1 except select * from Table2) x\n",[4215,23144,23145],{"class":4217,"line":1084},[4215,23146,23147],{},"union all\n",[4215,23149,23150],{"class":4217,"line":4234},[4215,23151,23152],{},"select 'table2' as tblName, *  from\n",[4215,23154,23155],{"class":4217,"line":4240},[4215,23156,23157],{},"  (select * from Table2 except select *  from Table1 ) x\n",[16,23159,23160],{},"If you are fortunate to have primary keys you can of course still use IN\u002FNOT IN type queries however it seems that\nperformance is much improved with the Except\u002FIntersect approach.",[4682,23162,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":23164},[],"2015-04-20T08:07:16.8200000-04:00","Learn how to compare two SQL Server tables",{},"\u002Farticles\u002Fsql-server-comparing-tables-merge-except-intersect",{"title":23061,"description":23166},"articles\u002Fsql-server-comparing-tables-merge-except-intersect",[8743],"a3XLSKncpyYY6AaLiNGJj9hTlH1eTB877PjeGfHig8M",{"id":23174,"title":23175,"author":8,"body":23176,"createdAt":23261,"description":23262,"extension":1101,"img":8988,"meta":23263,"navigation":1104,"path":23264,"seo":23265,"stem":23266,"tags":23267,"updatedAt":23261,"__hash__":23268},"articles\u002Farticles\u002Fasp-net-2-0-compilation-again.md","ASPNET 2 Compilation Again",{"type":10,"value":23177,"toc":23259},[23178,23181,23192],[16,23179,23180],{},"There are a few ways of deploying a .NET 2.0 ASP.NET application",[48,23182,23183,23186,23189],{},[51,23184,23185],{},"using Web Site Deployment Project",[51,23187,23188],{},"using VS.NET Publish Command",[51,23190,23191],{},"using VS.NET Build Command",[16,23193,23194,23195,23197,23198,23201,23202,14501,23204,23206,23207,23209,23210,23213,23214,23217,23218,23220,23228,23230,23231,23233,23234,14501,23236,23238,23241,23243,23246,23247,23249,23252,23253,23255,23258],{},"1.) Using VS.NET Build",[1118,23196],{},"\nASP.NET not Visual Studio performs the build.  ASP.NET builds everything, including .cs and .vb code files and places all resulting assemblies in folder structure under Temporary ASP.NET files directory.  As ASP.NET does all of the compilation, the debug setting in the compilation section of the ",[19,23199,23200],{},"web.config controls debug or release mode",".  Compile with debug=true and you'll find the .pdb debugging symbol files alongside each assembly.  In this scenario the Configuration Manager is obsolete (not used) and as such the only option is 'Debug'.",[1118,23203],{},[1118,23205],{},"\n2.) Using VS.NET Publish",[1118,23208],{},"\nThis option is available when you are ready to publish to production.  The Publish command will precompile a web application and place the results into a director of your choosing (IIS\u002FFTP\u002FDirectory).  Options are available on the Publish dialog box that map to aspnet_compiler switches.  The aspnet_compiler tool has option to create pdb files however this is not available on the dialog box (within vs.net).  Publish always builds in ",[19,23211,23212],{},"release ","mode without pdb files.  The Publish command does ",[19,23215,23216],{},"not change the debug setting in the web.config"," SO if you precompile and updateable (option 'allow this precompiled site to be updateable') web site and then update the web site in place (which will result in a dynamic compilation) those dynamic compilations will produce debug code and pdb files.",[1118,23219],{},[1139,23221,23223],{"href":23222},"\u002Farticles\u002Fimages\u002FWindowsLiveWriter\u002FASP.NET2.0CompilationAgain_A80B\u002Fimage_2.png",[156,23224],{"style":23225,"src":23226,"border":8404,"alt":158,"width":8473,"height":23227},"border-width: 0px;","\u002Farticles\u002Fimages\u002FWindowsLiveWriter\u002FASP.NET2.0CompilationAgain_A80B\u002Fimage_thumb.png",176,[1118,23229],{},"\n3.) Using Web Site Deployment Project (WSD)",[1118,23232],{},"\nThis project allows VS.NET to use MSBUILD files provided by WSD to ask for debug and release builds.  This tool uses the aspnet_compiler similar to above with the Publish option however the WSD option will change the debug setting in the web.config to false for release builds (different than the Publish option)  By default the built files will be in respective debug or release directories.",[1118,23235],{},[1118,23237],{},[4215,23239,4677],{"style":23240},"text-decoration: underline;",[1118,23242],{},[19,23244,23245],{},"VS.NET Build"," - builds web site to Temporary ASP.NET files directory with options specified in web.config",[1118,23248],{},[19,23250,23251],{},"VS.NET Publish"," - builds to release mode (always) however does not change the compilation mode in web.config file (which can lead to less than optimum performance if site is dynamically recompiled)",[1118,23254],{},[19,23256,23257],{},"Web Deployment Project"," - Builds based on Configuration Manager mode (debug\u002Frelease) AND updates the web.config with additional options for creating debug symbols and swapping out web.config sections based on release mode",{"title":1080,"searchDepth":1081,"depth":1081,"links":23260},[],"2015-04-20T08:07:16.6100000-04:00","few ways of deploying a .NET 2.0 ASP.NET application.",{},"\u002Farticles\u002Fasp-net-2-0-compilation-again",{"title":23175,"description":23262},"articles\u002Fasp-net-2-0-compilation-again",[8994],"Q7K6EcEId9aFUHSq2rTPkmqg7nFfMagSzSQpOK5YPu4",{"id":23270,"title":23271,"author":8,"body":23272,"createdAt":25174,"description":25175,"extension":1101,"img":25171,"meta":25176,"navigation":1104,"path":25177,"seo":25178,"stem":25179,"tags":25180,"updatedAt":25174,"__hash__":25181},"articles\u002Farticles\u002Fmicrosoft-ajax-features-and-implementation-samples.md","Microsoft AJAX Features and Implementation Samples",{"type":10,"value":23273,"toc":25172},[23274,23277,23283,23297,23300,23319,23324,23341,23390,23419,23422,23430,23433,23642,23645,23662,23665,23673,23729,23834,23837,23845,23848,24243,24245,24248,24258,25169],[16,23275,23276],{},"There are many options within the Microsoft stack of products for AJAX type functionality.  The following article covers the primary mechanisms that utilize the Microsoft out of the box Ajax functionality.  Ajax must be one of the technologies used in all current web applications.  The primary benefit is the improved user experience by providing quick, responsive feedback.",[16,23278,23279,23280,23282],{},"Core features include Ajax Client Libraries and Ajax Server Controls.  These libraries and controls enable the developer to quickly implement solutions within any ASP.NET application. ",[1118,23281],{},"\nI have also included in this article the examples for utilizing the Microsoft AJAX libraries using:",[48,23284,23285,23288,23291,23294],{},[51,23286,23287],{},"update panel server control",[51,23289,23290],{},"access to web service from JavaScript",[51,23292,23293],{},"access to page methods (without web service)",[51,23295,23296],{},"HttpRequest\u002FPost from javascript.",[16,23298,23299],{},"AJAX Client Libraries",[48,23301,23302,23305,23308,23311,23314,23316],{},[51,23303,23304],{},"Client-Script libraries that provide features for object-oriented development which enable high level of consistency and modularity in client scripting.",[51,23306,23307],{},"Browser compatibility",[51,23309,23310],{},"Extensions to JavaScript such as classes, namespaces, event handling, inheritance, data types and object serialization",[51,23312,23313],{},"Networking layer that handles communication with web based services",[51,23315,22089],{},[51,23317,23318],{},"Javascript Shortcuts i.e. $get(‘elementId’), $addHandler, $removeHandler",[16,23320,23321],{},[19,23322,23323],{},"Asp.Net AJAX Server Controls",[48,23325,23326,23329,23332,23335,23338],{},[51,23327,23328],{},"ScriptManager",[51,23330,23331],{},"Manages Javascript",[51,23333,23334],{},"Enables partial page rendering w\u002FUpdatePanel",[51,23336,23337],{},"Creates client side proxies for Web Services",[51,23339,23340],{},"Provides registration methods for scripts",[13,23342,10274,23343,10274],{},[2232,23344,23346,23347,23352,23353,23356,23357,23361,23362,23365,23366,23370,23371,23375,23376,23380,23381,23384,23385,23389],{"className":23345},[15370],"\u003Casp:ScriptManager ID=",[4215,23348,23351],{"className":23349},[23350],"str","\"mng1\""," runat=",[4215,23354,8839],{"className":23355},[23350],"  \n                    EnablePartialRendering=",[4215,23358,23360],{"className":23359},[23350],"\"true|false\"","  \n                    EnablePageMethods=",[4215,23363,23360],{"className":23364},[23350],"  \n                    ScriptMode=",[4215,23367,23369],{"className":23368},[23350],"\"Auto|Inherit|Debug|Release\"","  \n                    ScriptPath=",[4215,23372,23374],{"className":23373},[23350],"\"...\"",">                          \n                    \u003CScripts>  \n                        \u003Casp:ScriptReference Name=",[4215,23377,23379],{"className":23378},[23350],"\"script.js\""," Assembly=",[4215,23382,23374],{"className":23383},[23350]," \u002F>  \n                    \u003C\u002FScripts>  \n                    \u003CServices>  \n                        \u003Casp:ServiceReference Path=",[4215,23386,23388],{"className":23387},[23350],"\"~\u002FMyWebService.asmx\""," \u002F>                          \n                    \u003C\u002FServices>      \n       \u003C\u002Fasp:ScriptManager>",[48,23391,23392,23395,23398,23401,23404,23407,23410,23413,23416],{},[51,23393,23394],{},"ScriptManagerProxy",[51,23396,23397],{},"Used with Master Pages",[51,23399,23400],{},"If you include the ScriptManager control on the master page, it can act as the ScriptManager control for all content pages.  If you want to register scripts or services declaratively in a content page, you can add a ScriptManagerProxy control to the content page.",[51,23402,23403],{},"UpdatePanel",[51,23405,23406],{},"Improves user experience of application by updating a portion of the web page thereby improving interactivity",[51,23408,23409],{},"By default controls within the update panel can trigger the update.  ChildrenAsTriggers property is by default set to true.  In our example the link button is within the update panel and so can trigger the partial page update.  By default any postback control inside an update panel causes an async postback",[51,23411,23412],{},"Controls outside of the update panel can also trigger the panel contents to update.  For example look at btnGo, it resides outside the panel however it is defined within the panel as a trigger\u002Fcontrol that can force the async update to the panel contents.  Reference the \u003Casp:AsyncPostBackTrigger> element within the \u003CTrigger> element of the updatePanel",[51,23414,23415],{},"set EnableParitalPageRendering=”true”",[51,23417,23418],{},"Shown here is how a timer defined outside of the panel can trigger the update panel to refresh at a defined interval",[13,23420,23421],{},"  \n     \u003Casp:UpdatePanel id=”panel1” runat=”server” \n                              UpdateMode=”Always\u002FConditional” \n                              ChildrenAsTriggers=”true\u002Ffalse”> \n                       \u003CTriggers> \n                             \u003Casp:AsyncPostBackTrigger ControlID=”timer1”\u002F> \n                        \u003C\u002FTriggers> \n                        \u003CContentTemplate> \n                             \u003C!—page content here --> \n                       \u003C\u002FContentTemplate> \n        \u003C\u002Fasp:UpdatePanel> \n       \u003Casp:Timer id=”timer1” runat=”server” Interval=”3000” OnTick=”OnTimerTick”\u002F>  \n",[48,23423,23424,23427],{},[51,23425,23426],{},"UpdateProgress",[51,23428,23429],{},"provides status information about partial-page updates in the UpdatePanel controls.  The content can be customized.  To prevent flashing when a partial-page update is very fast, you can specify a delay before the UpdatePanel control is displayed",[19,23431,23432],{},"\n Update Panel Example ",[13,23434,23435,23436,23498,23499,10274],{},"  \nCode behind which responds to the button click to update a label control with the current time.  \n",[9636,23437,10274,23439,10274],{"style":23438},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 85.8%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23440,10274,23442,10274,23454,10274,23458,10274,23470,10274,23473,10274,23476,10274,23479,10274,23481,10274,23491,10274,23493,10274,23495,10274],{"style":23441},"line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: consolas, 'Courier New', courier, monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,23443,23445,11776,23448,11776,23451,23453],{"style":23444},"line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: consolas, 'Courier New', courier, monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[4215,23446,14963],{"style":23447},"color: #0000ff;",[4215,23449,23450],{"style":23447},"partial",[4215,23452,14966],{"style":23447}," Panel : System.Web.UI.Page",[2232,23455,23457],{"style":23456},"line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: consolas, 'Courier New', courier, monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;","{",[2232,23459,11983,23460,11776,23463,23465,23466,23469],{"style":23444},[4215,23461,23462],{"style":23447},"protected",[4215,23464,21296],{"style":23447}," Page_Load(",[4215,23467,23468],{"style":23447},"object"," sender, EventArgs e)",[2232,23471,23472],{"style":23456},"    {",[2232,23474,23475],{"style":23444},"        lblName.Text = DateTime.Now.ToString();",[2232,23477,23478],{"style":23456},"    }",[2232,23480,8422],{"style":23444},[2232,23482,11983,23483,11776,23485,23487,23488,23490],{"style":23456},[4215,23484,23462],{"style":23447},[4215,23486,21296],{"style":23447}," lnkButton_Click(",[4215,23489,23468],{"style":23447}," sender, EventArgs e) {",[2232,23492,23475],{"style":23444},[2232,23494,23478],{"style":23456},[2232,23496,23497],{"style":23444},"}","  \nPage HTML code with embedded update panel which responds to a control within the panel and a button defined as a trigger outside of the panel control.  \n",[9636,23500,10274,23502,10274],{"style":23501},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 86.23%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23503,10274,23504,10274,23507,10274,23516,10274,23529,10274,23537,10274,23540,10274,23557,10274,23576,10274,23579,10274,23582,10274,23589,10274,23592,10274,23595,10274,23606,10274,23609,10274,23612,10274,23615,10274,23618,10274,23621,10274,23623,10274,23636,10274,23639,10274],{"style":23441},[2232,23505,23506],{"style":23444},"\u003Cbody>",[2232,23508,23509,23510,23352,23514,8850],{"style":23456},"    \u003Cform id=",[4215,23511,23513],{"style":23512},"color: #006080;","\"form1\"",[4215,23515,8839],{"style":23512},[2232,23517,23518,23519,23352,23522,23524,23525,23528],{"style":23456},"        \u003Casp:ScriptManager ID=",[4215,23520,23521],{"style":23512},"\"ScriptManager1\"",[4215,23523,8839],{"style":23512}," EnablePartialRendering=",[4215,23526,23527],{"style":23512},"\"true\"",">\u003C\u002Fasp:ScriptManager>",[2232,23530,23531,23532,23352,23535,8850],{"style":23456},"        \u003Casp:UpdatePanel ID=",[4215,23533,23534],{"style":23512},"\"UpdatePanel1\"",[4215,23536,8839],{"style":23512},[2232,23538,23539],{"style":23444},"            \u003CContentTemplate>",[2232,23541,23542,23543,23352,23546,23548,23549,23552,23553,23556],{"style":23456},"                 \u003Casp:Label ID=",[4215,23544,23545],{"style":23512},"\"lblName\"",[4215,23547,8839],{"style":23512}," CssClass=",[4215,23550,23551],{"style":23512},"\"lbl\""," Text=",[4215,23554,23555],{"style":23512},"\"\"",">\u003C\u002Fasp:Label>",[2232,23558,23559,23560,23352,23563,23548,23565,23568,23569,23552,23572,23575],{"style":23456},"                 \u003Casp:LinkButton ID=",[4215,23561,23562],{"style":23512},"\"lnkButton\"",[4215,23564,8839],{"style":23512},[4215,23566,23567],{"style":23512},"\"lnk\""," onclick=",[4215,23570,23571],{"style":23512},"\"lnkButton_Click\"",[4215,23573,23574],{"style":23512},"\"Update\"",">\u003C\u002Fasp:LinkButton>",[2232,23577,23578],{"style":23456},"            \u003C\u002FContentTemplate>        ",[2232,23580,23581],{"style":23444},"            \u003CTriggers> ",[2232,23583,23584,23585,23588],{"style":23456},"              \u003Casp:AsyncPostBackTrigger ControlID=",[4215,23586,23587],{"style":23512},"\"btnGo\""," \u002F>",[2232,23590,23591],{"style":23444},"            \u003C\u002FTriggers>",[2232,23593,23594],{"style":23456},"        \u003C\u002Fasp:UpdatePanel>",[2232,23596,23597,23598,23352,23601,23603,23604,8850],{"style":23456},"        \u003Casp:UpdateProgress ID=",[4215,23599,23600],{"style":23512},"\"UpdateProgress1\"",[4215,23602,8839],{"style":23512}," AssociatedUpdatePanelID=",[4215,23605,23534],{"style":23512},[2232,23607,23608],{"style":23444},"            \u003CProgressTemplate>",[2232,23610,23611],{"style":23456},"                Updating.",[2232,23613,23614],{"style":23444},"            \u003C\u002FProgressTemplate>",[2232,23616,23617],{"style":23456},"        \u003C\u002Fasp:UpdateProgress>",[2232,23619,23620],{"style":23456},"        \u003Cbr \u002F>",[2232,23622,23620],{"style":23444},[2232,23624,23625,23626,23352,23628,23548,23630,23552,23633,23588],{"style":23456},"        \u003Casp:Button ID=",[4215,23627,23587],{"style":23512},[4215,23629,8839],{"style":23512},[4215,23631,23632],{"style":23512},"\"btn\"",[4215,23634,23635],{"style":23512},"\"Go\"",[2232,23637,23638],{"style":23456},"    \u003C\u002Fform>",[2232,23640,23641],{"style":23444},"\u003C\u002Fbody>",[19,23643,23644],{},"Ajax and Web Service Example",[48,23646,23647,23650,23653,23659],{},[51,23648,23649],{},"Script Callable Web Service",[51,23651,23652],{},"Proxies are automatically generated",[51,23654,23655,23658],{},[4215,23656,23657],{},"ScriptService"," Attribute",[51,23660,23661],{},"If the web service returns a complex type, the succeeded callback function receives a return value in the form of Javascript object that corresponds to the server type.",[16,23663,23664],{},"Web Service code (simple function that returns ‘Hello World’)",[48,23666,23667],{},[51,23668,23669,23670,23672],{},"Web Service has ",[4215,23671,23657],{}," attribute",[9636,23674,10274,23676,10274],{"style":23675},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 82.54%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23677,10274,23678,10274,23685,10274,23688,10274,23691,10274,23698,10274,23703,10274,23705,10274,23707,10274,23710,10274,23717,10274,23724,10274,23727,10274],{"style":23441},[2232,23679,23680,23681,23684],{"style":23456},"[WebService(Namespace = ",[4215,23682,23683],{"style":23512},"\"http:\u002F\u002Ftempuri.org\u002F\"",")]",[2232,23686,23687],{"style":23444},"[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]",[2232,23689,23690],{"style":23456},"[System.Web.Script.Services.ScriptService]",[2232,23692,23693,11776,23695,23697],{"style":23444},[4215,23694,14963],{"style":23447},[4215,23696,14966],{"style":23447}," MyWebService : System.Web.Services.WebService {",[2232,23699,11983,23700,23702],{"style":23444},[4215,23701,14963],{"style":23447}," MyWebService () {",[2232,23704,23478],{"style":23456},[2232,23706,8422],{"style":23444},[2232,23708,23709],{"style":23456},"    [WebMethod]",[2232,23711,11983,23712,11776,23714,23716],{"style":23444},[4215,23713,14963],{"style":23447},[4215,23715,15022],{"style":23447}," HelloWorld() {",[2232,23718,12818,23719,11776,23721,15454],{"style":23456},[4215,23720,15052],{"style":23447},[4215,23722,23723],{"style":23512},"\"Hello World\"",[2232,23725,23726],{"style":23444},"    }    ",[2232,23728,23497],{"style":23456},[13,23730,23731,23732,10274,23832,10274],{},"  \nPage Code (page with button which calls js function, which in turn calls the web service defined within ScriptManager-ScriptReference tag)  \n",[9636,23733,10274,23735,10274],{"style":23734},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 86.21%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23736,10274,23737,10274,23744,10274,23751,10274,23754,10274,23759,10274,23762,10274,23765,10274,23782,10274,23787,10274,23789,10274,23792,10274,23795,10274,23798,10274,23800,10274,23803,10274,23806,10274,23808,10274,23810,10274,23813,10274,23816,10274,23818,10274,23821,10274,23823,10274,23826,10274,23829,10274],{"style":23441},[2232,23738,23739,23740,23352,23742,8850],{"style":23444},"\u003Cform id=",[4215,23741,23513],{"style":23512},[4215,23743,8839],{"style":23512},[2232,23745,23746,23747,23352,23749,8850],{"style":23456},"    \u003Casp:ScriptManager ID=",[4215,23748,23521],{"style":23512},[4215,23750,8839],{"style":23512},[2232,23752,23753],{"style":23444},"        \u003CServices>",[2232,23755,23756,23757,23588],{"style":23456},"            \u003Casp:ServiceReference Path=",[4215,23758,23388],{"style":23512},[2232,23760,23761],{"style":23444},"        \u003C\u002FServices>        ",[2232,23763,23764],{"style":23456},"    \u003C\u002Fasp:ScriptManager>",[2232,23766,23767,23768,23352,23771,23548,23773,23552,23775,23778,23779,23588],{"style":23444},"    \u003Casp:Button ID=",[4215,23769,23770],{"style":23512},"\"btnGet\"",[4215,23772,8839],{"style":23512},[4215,23774,23632],{"style":23512},[4215,23776,23777],{"style":23512},"\"Get\""," OnClientClick=",[4215,23780,23781],{"style":23512},"\"update();return false\"",[2232,23783,23784,23785,8850],{"style":23444},"    \u003Cscript type=",[4215,23786,8818],{"style":23512},[2232,23788,8422],{"style":23456},[2232,23790,23791],{"style":23444},"        function update() {",[2232,23793,23794],{"style":23456},"            MyWebService.HelloWorld(onCompleted, onFailed);",[2232,23796,23797],{"style":23444},"        }",[2232,23799,8422],{"style":23456},[2232,23801,23802],{"style":23444},"        function onCompleted(result, context, methodName) {",[2232,23804,23805],{"style":23456},"            alert(result);",[2232,23807,23797],{"style":23444},[2232,23809,8422],{"style":23456},[2232,23811,23812],{"style":23444},"        function onFailed(err, context, methodName) {",[2232,23814,23815],{"style":23456},"            alert(err.get_message());",[2232,23817,23797],{"style":23444},[2232,23819,23820],{"style":23444},"    \u003C\u002Fscript>",[2232,23822,8422],{"style":23456},[2232,23824,23825],{"style":23444},"\u003C\u002Fform>",[2232,23827,23828],{"style":23456},"dy>",[2232,23830,23831],{"style":23444},"ml>",[19,23833,8422],{},[19,23835,23836],{},"Page Method Example",[48,23838,23839,23842],{},[51,23840,23841],{},"Allows javascript Ajax call back to page without web service",[51,23843,23844],{},"use EnablePageMethods=true in the ScriptManager control",[13,23846,23847],{},"  \nThe following is a sample showing a code behind static method marked with WebMethod attribute.  \n",[13,23849,10274,23850,23931,23932,10274,23934,10274],{},[9636,23851,10274,23853,10274],{"style":23852},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 86.84%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23854,10274,23855,10274,23866,10274,23870,10274,23880,10274,23884,10274,23889,10274,23893,10274,23897,10274,23902,10274,23916,10274,23923,10274,23927,10274],{"style":23441},[2232,23856,23857],{"style":23444},[19,23858,23859,11776,23861,11776,23863,23865],{},[4215,23860,14963],{"style":23447},[4215,23862,23450],{"style":23447},[4215,23864,14966],{"style":23447}," PageMethod : System.Web.UI.Page",[2232,23867,23868],{"style":23456},[19,23869,23457],{},[2232,23871,23872],{"style":23444},[19,23873,11983,23874,11776,23876,23465,23878,23469],{},[4215,23875,23462],{"style":23447},[4215,23877,21296],{"style":23447},[4215,23879,23468],{"style":23447},[2232,23881,23882],{"style":23456},[19,23883,23472],{},[2232,23885,23886],{"style":23444},[19,23887,23888],{},"        Response.Write(DateTime.Now.ToString());",[2232,23890,23891],{"style":23456},[19,23892,23478],{},[2232,23894,23895],{"style":23444},[19,23896,8422],{},[2232,23898,23899],{"style":23456},[19,23900,23901],{},"    [System.Web.Services.WebMethod]",[2232,23903,23904],{"style":23444},[19,23905,11983,23906,11776,23908,11776,23910,23912,23913,23915],{},[4215,23907,14963],{"style":23447},[4215,23909,21291],{"style":23447},[4215,23911,15022],{"style":23447}," update(",[4215,23914,15022],{"style":23447}," input){",[2232,23917,23918],{"style":23456},[19,23919,12818,23920,23922],{},[4215,23921,15052],{"style":23447}," input.ToUpper();",[2232,23924,23925],{"style":23444},[19,23926,23478],{},[2232,23928,23929],{"style":23456},[19,23930,23497],{},"  \nAspx code with a button that calls javascript, which in turn calls the page method ‘update’ to return uppercase string",[19,23933,1200],{},[9636,23935,10274,23937,10274],{"style":23936},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 88.59%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,23938,10274,23939,10274,23957,10274,23973,10274,23987,10274,23997,10274,24007,10274,24028,10274,24061,10274,24099,10274,24103,10274,24119,10274,24127,10274,24138,10274,24150,10274,24162,10274,24170,10274,24180,10274,24188,10274,24195,10274,24203,10274,24213,10274,24223,10274,24233,10274],{"style":23441},[2232,23940,23941],{"style":23444},[19,23942,23943,23945,11776,23948,23952,23955],{},[4215,23944,8666],{"style":23447},[4215,23946,8650],{"style":23947},"color: #800000;",[4215,23949,23951],{"style":23950},"color: #ff0000;","xmlns",[4215,23953,23954],{"style":23447},"=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\"",[4215,23956,8850],{"style":23447},[2232,23958,23959],{"style":23456},[19,23960,23961,23963,11776,23965,23968,23971],{},[4215,23962,8666],{"style":23447},[4215,23964,9378],{"style":23947},[4215,23966,23967],{"style":23950},"runat",[4215,23969,23970],{"style":23447},"=\"server\"",[4215,23972,8850],{"style":23447},[2232,23974,23975],{"style":23444},[19,23976,11983,23977,23979,23981,23983,23985],{},[4215,23978,8666],{"style":23447},[4215,23980,9474],{"style":23947},[4215,23982,8821],{"style":23447},[4215,23984,9474],{"style":23947},[4215,23986,8850],{"style":23447},[2232,23988,23989],{"style":23456},[19,23990,23991,23993,23995],{},[4215,23992,8902],{"style":23447},[4215,23994,9378],{"style":23947},[4215,23996,8850],{"style":23447},[2232,23998,23999],{"style":23444},[19,24000,24001,24003,24005],{},[4215,24002,8666],{"style":23447},[4215,24004,9586],{"style":23947},[4215,24006,8850],{"style":23447},[2232,24008,24009],{"style":23456},[19,24010,11983,24011,24013,11776,24016,24019,11776,24022,24024,24026],{},[4215,24012,8666],{"style":23447},[4215,24014,24015],{"style":23947},"form",[4215,24017,24018],{"style":23950},"id",[4215,24020,24021],{"style":23447},"=\"form1\"",[4215,24023,23967],{"style":23950},[4215,24025,23970],{"style":23447},[4215,24027,8850],{"style":23447},[2232,24029,24030],{"style":23456},[19,24031,11983,24032,24034,11776,24037,24040,11776,24043,24045,11776,24047,24050,11776,24053,24056,11776,24058],{},[4215,24033,8666],{"style":23447},[4215,24035,24036],{"style":23947},"asp:ScriptManager",[4215,24038,24039],{"style":23950},"ID",[4215,24041,24042],{"style":23447},"=\"ScriptManager1\"",[4215,24044,23967],{"style":23950},[4215,24046,23970],{"style":23447},[4215,24048,24049],{"style":23950},"EnablePartialRendering",[4215,24051,24052],{"style":23447},"=\"true\"",[4215,24054,24055],{"style":23950},"EnablePageMethods",[4215,24057,24052],{"style":23447},[4215,24059,24060],{"style":23447},"\u002F>",[2232,24062,24063],{"style":23444},[19,24064,11983,24065,24067,11776,24070,24072,11776,24075,24077,11776,24079,24082,11776,24085,24088,11776,24091,24094,11776,24097],{},[4215,24066,8666],{"style":23447},[4215,24068,24069],{"style":23947},"asp:Button",[4215,24071,24039],{"style":23950},[4215,24073,24074],{"style":23447},"=\"btnGet\"",[4215,24076,23967],{"style":23950},[4215,24078,23970],{"style":23447},[4215,24080,24081],{"style":23950},"CssClass",[4215,24083,24084],{"style":23447},"=\"btn\"",[4215,24086,24087],{"style":23950},"Text",[4215,24089,24090],{"style":23447},"=\"Get\"",[4215,24092,24093],{"style":23950},"OnClientClick",[4215,24095,24096],{"style":23447},"=\"update();return false\"",[4215,24098,24060],{"style":23447},[2232,24100,24101],{"style":23456},[19,24102,8422],{},[2232,24104,24105],{"style":23444},[19,24106,12818,24107,24109,11776,24111,24114,24117],{},[4215,24108,8666],{"style":23447},[4215,24110,8801],{"style":23947},[4215,24112,24113],{"style":23950},"type",[4215,24115,24116],{"style":23447},"=\"text\u002Fjavascript\"",[4215,24118,8850],{"style":23447},[2232,24120,24121],{"style":23444},[19,24122,24123,8407],{},[4215,24124,24126],{"style":24125},"color: #606060;","   1:",[2232,24128,24129],{"style":23456},[19,24130,24131,24134,24135,24137],{},[4215,24132,24133],{"style":24125},"   2:","             ",[4215,24136,22523],{"style":23447}," update() {",[2232,24139,24140],{"style":23444},[19,24141,24142,24145,24146,24149],{},[4215,24143,24144],{"style":24125},"   3:","                 PageMethods.update(",[4215,24147,24148],{"style":23512},"\"test\"",", onCompleted);",[2232,24151,24152],{"style":23456},[19,24153,24154,24157,24158,11776,24160,15454],{},[4215,24155,24156],{"style":24125},"   4:","                 ",[4215,24159,15052],{"style":23447},[4215,24161,9854],{"style":23447},[2232,24163,24164],{"style":23444},[19,24165,24166,24169],{},[4215,24167,24168],{"style":24125},"   5:","             }",[2232,24171,24172],{"style":23456},[19,24173,24174,24134,24177,24179],{},[4215,24175,24176],{"style":24125},"   6:",[4215,24178,22523],{"style":23447}," onCompleted(result) {",[2232,24181,24182],{"style":23444},[19,24183,24184,24187],{},[4215,24185,24186],{"style":24125},"   7:","                 alert(result.toString());",[2232,24189,24190],{"style":23456},[19,24191,24192,24169],{},[4215,24193,24194],{"style":24125},"   8:",[2232,24196,24197],{"style":23444},[19,24198,24199,24202],{},[4215,24200,24201],{"style":24125},"   9:","         ",[2232,24204,24205],{"style":23444},[19,24206,24207,24209,24211],{},[4215,24208,8902],{"style":23447},[4215,24210,8801],{"style":23947},[4215,24212,8850],{"style":23447},[2232,24214,24215],{"style":23444},[19,24216,11983,24217,24219,24221],{},[4215,24218,8902],{"style":23447},[4215,24220,24015],{"style":23947},[4215,24222,8850],{"style":23447},[2232,24224,24225],{"style":23456},[19,24226,24227,24229,24231],{},[4215,24228,8902],{"style":23447},[4215,24230,9586],{"style":23947},[4215,24232,8850],{"style":23447},[2232,24234,24235],{"style":23444},[19,24236,24237,24239,24241],{},[4215,24238,8902],{"style":23447},[4215,24240,8650],{"style":23947},[4215,24242,8850],{"style":23447},[19,24244,8422],{},[19,24246,24247],{},"HTTP Requests (from Javascript) Sample",[13,24249,10274,24250],{},[48,24251,24252,24255],{},[51,24253,24254],{},"The async communication layer enables javascript to make a request over the network to any http end point by using Sys.Net.WebRequest class",[51,24256,24257],{},"The sample performs a post and get http request from javascript",[13,24259,24260,24261,24373,24374,24902,24903,24976,24977,10274],{},"  \nPage code that initiates the javascript call GetWebRequest().  \n",[9636,24262,10274,24264,10274],{"style":24263},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 86.48%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,24265,10274,24266,10274,24274,10274,24278,10274,24286,10274,24291,10274,24299,10274,24304,10274,24309,10274,24313,10274,24331,10274,24348,10274,24352,10274,24361,10274,24365,10274,24369,10274],{"style":23441},[2232,24267,24268],{"style":23444},[19,24269,23739,24270,23352,24272,8850],{},[4215,24271,23513],{"style":23512},[4215,24273,8839],{"style":23512},[2232,24275,24276],{"style":23456},[19,24277,8422],{},[2232,24279,24280],{"style":23444},[19,24281,23346,24282,23352,24284,8850],{},[4215,24283,23521],{"style":23512},[4215,24285,8839],{"style":23512},[2232,24287,24288],{"style":23456},[19,24289,24290],{},"    \u003CScripts>",[2232,24292,24293],{"style":23444},[19,24294,24295,24296,23588],{},"        \u003Casp:ScriptReference Path=",[4215,24297,24298],{"style":23512},"\"~\u002Fconnect.js\"",[2232,24300,24301],{"style":23456},[19,24302,24303],{},"    \u003C\u002FScripts>",[2232,24305,24306],{"style":23444},[19,24307,24308],{},"\u003C\u002Fasp:ScriptManager>",[2232,24310,24311],{"style":23456},[19,24312,8422],{},[2232,24314,24315],{"style":23456},[19,24316,24317,24318,23352,24320,23548,24322,23552,24324,24327,24328,23588],{},"\u003Casp:Button ID=",[4215,24319,23587],{"style":23512},[4215,24321,8839],{"style":23512},[4215,24323,23632],{"style":23512},[4215,24325,24326],{"style":23512},"\"GetWebRequest\"","  OnClientClick=",[4215,24329,24330],{"style":23512},"\"GetWebRequest();return false;\"",[2232,24332,24333],{"style":23444},[19,24334,24317,24335,23352,24338,23548,24340,23552,24342,23778,24345,23588],{},[4215,24336,24337],{"style":23512},"\"btnPost\"",[4215,24339,8839],{"style":23512},[4215,24341,23632],{"style":23512},[4215,24343,24344],{"style":23512},"\"PostWebRequest\"",[4215,24346,24347],{"style":23512},"\"PostWebRequest();return false;\"",[2232,24349,24350],{"style":23456},[19,24351,8422],{},[2232,24353,24354],{"style":23444},[19,24355,24356,24357,24360],{},"\u003Cdiv id=",[4215,24358,24359],{"style":23512},"\"result\"",">initial content\u003C\u002Fdiv>",[2232,24362,24363],{"style":23456},[19,24364,8422],{},[2232,24366,24367],{"style":23444},[19,24368,8422],{},[2232,24370,24371],{"style":23456},[19,24372,23825],{},"  \nJavascript (connect.js) file which performs the webrequest  \n",[9636,24375,10274,24377,10274],{"style":24376},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 87.69%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,24378,10274,24379,10274,24387,10274,24391,10274,24396,10274,24400,10274,24405,10274,24412,10274,24416,10274,24420,10274,24425,10274,24434,10274,24441,10274,24449,10274,24456,10274,24464,10274,24471,10274,24475,10274,24482,10274,24490,10274,24497,10274,24502,10274,24509,10274,24516,10274,24520,10274,24527,10274,24532,10274,24536,10274,24540,10274,24547,10274,24552,10274,24559,10274,24563,10274,24569,10274,24575,10274,24579,10274,24585,10274,24592,10274,24599,10274,24603,10274,24609,10274,24616,10274,24620,10274,24627,10274,24631,10274,24635,10274,24642,10274,24647,10274,24654,10274,24659,10274,24668,10274,24673,10274,24677,10274,24683,10274,24689,10274,24693,10274,24699,10274,24704,10274,24708,10274,24712,10274,24716,10274,24723,10274,24730,10274,24737,10274,24742,10274,24749,10274,24756,10274,24763,10274,24767,10274,24774,10274,24779,10274,24792,10274,24804,10274,24808,10274,24815,10274,24823,10274,24830,10274,24834,10274,24841,10274,24848,10274,24852,10274,24859,10274,24864,10274,24871,10274,24876,10274,24880,10274,24884,10274,24888,10274],{"style":23441},[2232,24380,24381],{"style":23444},[4215,24382,24384],{"style":24383},"color: #008000;",[19,24385,24386],{},"\u002F\u002F connect.js",[2232,24388,24389],{"style":23456},[19,24390,8422],{},[2232,24392,24393],{"style":23444},[19,24394,24395],{},"var resultElement;",[2232,24397,24398],{"style":23456},[19,24399,8422],{},[2232,24401,24402],{"style":23444},[19,24403,24404],{},"function pageLoad() {",[2232,24406,24407],{"style":23456},[19,24408,24409,24410,14624],{},"    resultElement = $get(",[4215,24411,24359],{"style":23512},[2232,24413,24414],{"style":23444},[19,24415,23497],{},[2232,24417,24418],{"style":23456},[19,24419,8422],{},[2232,24421,24422],{"style":23444},[19,24423,24424],{},"function GetWebRequest() {",[2232,24426,24427],{"style":23456},[19,24428,24429,24430,24433],{},"    alert(",[4215,24431,24432],{"style":23512},"\"performing web request\"",");",[2232,24435,24436],{"style":23456},[19,24437,11983,24438],{},[4215,24439,24440],{"style":24383},"\u002F\u002F Instantiate a WebRequest.",[2232,24442,24443],{"style":23444},[19,24444,24445,24446,24448],{},"    var wRequest = ",[4215,24447,14601],{"style":23447}," Sys.Net.WebRequest();",[2232,24450,24451],{"style":23444},[19,24452,11983,24453],{},[4215,24454,24455],{"style":24383},"\u002F\u002F Set the request URL.      ",[2232,24457,24458],{"style":23456},[19,24459,24460,24461,24433],{},"    wRequest.set_url(",[4215,24462,24463],{"style":23512},"\"getTarget.htm\"",[2232,24465,24466],{"style":23444},[19,24467,24429,24468,24433],{},[4215,24469,24470],{"style":23512},"\"Target Url: getTarget.htm\"",[2232,24472,24473],{"style":23456},[19,24474,8422],{},[2232,24476,24477],{"style":23444},[19,24478,11983,24479],{},[4215,24480,24481],{"style":24383},"\u002F\u002F Set the request verb.",[2232,24483,24484],{"style":23456},[19,24485,24486,24487,24433],{},"    wRequest.set_httpVerb(",[4215,24488,24489],{"style":23512},"\"GET\"",[2232,24491,24492],{"style":23456},[19,24493,11983,24494],{},[4215,24495,24496],{"style":24383},"\u002F\u002F Set the request callback function.",[2232,24498,24499],{"style":23444},[19,24500,24501],{},"    wRequest.add_completed(OnWebRequestCompleted);",[2232,24503,24504],{"style":23444},[19,24505,11983,24506],{},[4215,24507,24508],{"style":24383},"\u002F\u002F Clear the results area.",[2232,24510,24511],{"style":23456},[19,24512,24513,24514,15454],{},"    resultElement.innerHTML = ",[4215,24515,23555],{"style":23512},[2232,24517,24518],{"style":23444},[19,24519,8422],{},[2232,24521,24522],{"style":23456},[19,24523,11983,24524],{},[4215,24525,24526],{"style":24383},"\u002F\u002F Execute the request.",[2232,24528,24529],{"style":23444},[19,24530,24531],{},"    wRequest.invoke();      ",[2232,24533,24534],{"style":23456},[19,24535,23497],{},[2232,24537,24538],{"style":23444},[19,24539,8422],{},[2232,24541,24542],{"style":23456},[4215,24543,24544],{"style":24383},[19,24545,24546],{},"\u002F\u002F This function performs a POST Web request.",[2232,24548,24549],{"style":23444},[19,24550,24551],{},"function PostWebRequest() {",[2232,24553,24554],{"style":23456},[19,24555,24429,24556,24433],{},[4215,24557,24558],{"style":23512},"\"Performing Post Web request.\"",[2232,24560,24561],{"style":23444},[19,24562,8422],{},[2232,24564,24565],{"style":23456},[19,24566,11983,24567],{},[4215,24568,24440],{"style":24383},[2232,24570,24571],{"style":23444},[19,24572,24445,24573,24448],{},[4215,24574,14601],{"style":23447},[2232,24576,24577],{"style":23456},[19,24578,8422],{},[2232,24580,24581],{"style":23444},[19,24582,11983,24583],{},[4215,24584,24455],{"style":24383},[2232,24586,24587],{"style":23456},[19,24588,24460,24589,24433],{},[4215,24590,24591],{"style":23512},"\"postTarget.aspx\"",[2232,24593,24594],{"style":23444},[19,24595,24429,24596,24433],{},[4215,24597,24598],{"style":23512},"\"Target Url: postTarget.aspx\"",[2232,24600,24601],{"style":23456},[19,24602,8422],{},[2232,24604,24605],{"style":23444},[19,24606,11983,24607],{},[4215,24608,24481],{"style":24383},[2232,24610,24611],{"style":23456},[19,24612,24486,24613,24433],{},[4215,24614,24615],{"style":23512},"\"POST\"",[2232,24617,24618],{"style":23444},[19,24619,8422],{},[2232,24621,24622],{"style":23456},[19,24623,11983,24624],{},[4215,24625,24626],{"style":24383},"\u002F\u002F Set the request handler.",[2232,24628,24629],{"style":23444},[19,24630,24501],{},[2232,24632,24633],{"style":23456},[19,24634,8422],{},[2232,24636,24637],{"style":23444},[19,24638,11983,24639],{},[4215,24640,24641],{"style":24383},"\u002F\u002F Set the body for he POST.",[2232,24643,24644],{"style":23456},[19,24645,24646],{},"    var requestBody =",[2232,24648,24649],{"style":23444},[19,24650,12818,24651,15454],{},[4215,24652,24653],{"style":23512},"\"Message=Hello! Do you hear me?\"",[2232,24655,24656],{"style":23456},[19,24657,24658],{},"    wRequest.set_body(requestBody);",[2232,24660,24661],{"style":23444},[19,24662,24663,24664,24667],{},"    wRequest.get_headers()[",[4215,24665,24666],{"style":23512},"\"Content-Length\"","] =",[2232,24669,24670],{"style":23456},[19,24671,24672],{},"        requestBody.length;",[2232,24674,24675],{"style":23444},[19,24676,8422],{},[2232,24678,24679],{"style":23456},[19,24680,11983,24681],{},[4215,24682,24508],{"style":24383},[2232,24684,24685],{"style":23444},[19,24686,24513,24687,15454],{},[4215,24688,23555],{"style":23512},[2232,24690,24691],{"style":23456},[19,24692,8422],{},[2232,24694,24695],{"style":23444},[19,24696,11983,24697],{},[4215,24698,24526],{"style":24383},[2232,24700,24701],{"style":23456},[19,24702,24703],{},"    wRequest.invoke();",[2232,24705,24706],{"style":23444},[19,24707,23497],{},[2232,24709,24710],{"style":23456},[19,24711,8422],{},[2232,24713,24714],{"style":23444},[19,24715,8422],{},[2232,24717,24718],{"style":23456},[4215,24719,24720],{"style":24383},[19,24721,24722],{},"\u002F\u002F This callback function processes the ",[2232,24724,24725],{"style":23444},[4215,24726,24727],{"style":24383},[19,24728,24729],{},"\u002F\u002F request return values. It is called asynchronously ",[2232,24731,24732],{"style":23456},[4215,24733,24734],{"style":24383},[19,24735,24736],{},"\u002F\u002F by the current executor.",[2232,24738,24739],{"style":23444},[19,24740,24741],{},"function OnWebRequestCompleted(executor, eventArgs) {",[2232,24743,24744],{"style":23456},[19,24745,11983,24746,24748],{},[4215,24747,15223],{"style":23447}," (executor.get_responseAvailable()) {",[2232,24750,24751],{"style":23444},[19,24752,12818,24753],{},[4215,24754,24755],{"style":24383},"\u002F\u002F Clear the previous results. ",[2232,24757,24758],{"style":23456},[19,24759,24760,24761,15454],{},"        resultElement.innerHTML = ",[4215,24762,23555],{"style":23512},[2232,24764,24765],{"style":23444},[19,24766,8422],{},[2232,24768,24769],{"style":23456},[19,24770,12818,24771],{},[4215,24772,24773],{"style":24383},"\u002F\u002F Display Web request status. ",[2232,24775,24776],{"style":23444},[19,24777,24778],{},"        resultElement.innerHTML +=",[2232,24780,24781],{"style":23456},[19,24782,24783,24784,24787,24788,24791],{},"          ",[4215,24785,24786],{"style":23512},"\"Status: [\""," + executor.get_statusCode() + ",[4215,24789,24790],{"style":23512},"\" \""," +",[2232,24793,24794],{"style":23444},[19,24795,24796,24797,24800,24801,15454],{},"                    executor.get_statusText() + ",[4215,24798,24799],{"style":23512},"\"]\""," + ",[4215,24802,24803],{"style":23512},"\"\u003Cbr\u002F>\"",[2232,24805,24806],{"style":23456},[19,24807,8422],{},[2232,24809,24810],{"style":23444},[19,24811,12818,24812],{},[4215,24813,24814],{"style":24383},"\u002F\u002F Display Web request headers.",[2232,24816,24817],{"style":23456},[19,24818,24819,24820,15454],{},"        resultElement.innerHTML += ",[4215,24821,24822],{"style":23512},"\"Headers: \"",[2232,24824,24825],{"style":23444},[19,24826,24827,24828,15454],{},"        resultElement.innerHTML += executor.getAllResponseHeaders() + ",[4215,24829,24803],{"style":23512},[2232,24831,24832],{"style":23456},[19,24833,8422],{},[2232,24835,24836],{"style":23444},[19,24837,12818,24838],{},[4215,24839,24840],{"style":24383},"\u002F\u002F Display Web request body.",[2232,24842,24843],{"style":23456},[19,24844,24778,24845,15454],{},[4215,24846,24847],{"style":23512},"\"Body:\"",[2232,24849,24850],{"style":23444},[19,24851,8422],{},[2232,24853,24854],{"style":23456},[19,24855,12818,24856,24858],{},[4215,24857,15223],{"style":23447}," (document.all)",[2232,24860,24861],{"style":23444},[19,24862,24863],{},"            resultElement.innerText += executor.get_responseData();",[2232,24865,24866],{"style":23456},[19,24867,12818,24868],{},[4215,24869,24870],{"style":23447},"else",[2232,24872,24873],{"style":23444},[19,24874,24875],{},"            resultElement.textContent += executor.get_responseData();",[2232,24877,24878],{"style":23456},[19,24879,23478],{},[2232,24881,24882],{"style":23444},[19,24883,8422],{},[2232,24885,24886],{"style":23456},[19,24887,23497],{},[2232,24889,24890],{"style":23444},[19,24891,24892,15468,24894,24897,24898,24901],{},[4215,24893,15223],{"style":23447},[4215,24895,24896],{"style":23447},"typeof"," (Sys) !== ",[4215,24899,24900],{"style":23512},"\"undefined\"",") Sys.Application.notifyScriptLoaded();","  \nTarget Html file used in the Get  \n",[9636,24904,10274,24906,10274],{"style":24905},"line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 88.16%; font-family: consolas, 'Courier New', courier, monospace; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px;",[9636,24907,10274,24908,10274,24919,10274,24928,10274,24933,10274,24938,10274,24943,10274,24947,10274,24952,10274,24957,10274,24962,10274,24967,10274,24971,10274],{"style":23441},[2232,24909,24910],{"style":23444},[19,24911,24912,24913,11776,24916,8850],{},"\u003C!DOCTYPE html PUBLIC ",[4215,24914,24915],{"style":23512},"\"-\u002F\u002FW3C\u002F\u002FDTD XHTML 1.0 Transitional\u002F\u002FEN\"",[4215,24917,24918],{"style":23512},"\"http:\u002F\u002Fwww.w3.org\u002FTR\u002Fxhtml1\u002FDTD\u002Fxhtml1-transitional.dtd\"",[2232,24920,24921],{"style":23456},[19,24922,24923,24924,24927],{},"\u003Chtml xmlns=",[4215,24925,24926],{"style":23512},"\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\""," >",[2232,24929,24930],{"style":23444},[19,24931,24932],{},"\u003Chead>",[2232,24934,24935],{"style":23456},[19,24936,24937],{},"    \u003Ctitle>Hello Page\u003C\u002Ftitle>",[2232,24939,24940],{"style":23444},[19,24941,24942],{},"\u003C\u002Fhead>",[2232,24944,24945],{"style":23456},[19,24946,23506],{},[2232,24948,24949],{"style":23444},[19,24950,24951],{},"    \u003Cp> ",[2232,24953,24954],{"style":23456},[19,24955,24956],{},"        Hello there. ",[2232,24958,24959],{"style":23444},[19,24960,24961],{},"        I got your GET Web request!",[2232,24963,24964],{"style":23456},[19,24965,24966],{},"    \u003C\u002Fp>",[2232,24968,24969],{"style":23444},[19,24970,23641],{},[2232,24972,24973],{"style":23456},[19,24974,24975],{},"\u003C\u002Fhtml>","  \nPost Aspx Page  \n",[9636,24978,10274,24979,10274],{"style":23936},[9636,24980,10274,24981,10274,24993,10274,24997,10274,25005,10274,25009,10274,25015,10274,25025,10274,25030,10274,25039,10274,25049,10274,25054,10274,25069,10274,25074,10274,25082,10274,25086,10274,25090,10274,25094,10274,25098,10274,25102,10274,25110,10274,25115,10274,25120,10274,25125,10274,25133,10274,25142,10274,25147,10274,25152,10274,25157,10274,25161,10274,25165,10274],{"style":23441},[2232,24982,24983],{"style":23444},[19,24984,24985,24986,24989,24990,24992],{},"\u003C%@ Page Language=",[4215,24987,24988],{"style":23512},"\"C#\""," AutoEventWireup=",[4215,24991,23527],{"style":23512},"  %>",[2232,24994,24995],{"style":23456},[19,24996,8422],{},[2232,24998,24999],{"style":23444},[19,25000,24912,25001,11776,25003,8850],{},[4215,25002,24915],{"style":23512},[4215,25004,24918],{"style":23512},[2232,25006,25007],{"style":23456},[19,25008,8422],{},[2232,25010,25011],{"style":23444},[19,25012,24923,25013,24927],{},[4215,25014,24926],{"style":23512},[2232,25016,25017],{"style":23456},[19,25018,25019,25020,23352,25023,8850],{},"\u003Chead id=",[4215,25021,25022],{"style":23512},"\"Head1\"",[4215,25024,8839],{"style":23512},[2232,25026,25027],{"style":23444},[19,25028,25029],{},"    \u003Ctitle>Post Target\u003C\u002Ftitle>",[2232,25031,25032],{"style":23444},[19,25033,25034,25035,23352,25037,8850],{},"    \u003Cscript language=",[4215,25036,24988],{"style":23512},[4215,25038,8839],{"style":23512},[2232,25040,25041],{"style":23444},[19,25042,12818,25043,11776,25045,23465,25047,23469],{},[4215,25044,23462],{"style":23447},[4215,25046,21296],{"style":23447},[4215,25048,23468],{"style":23447},[2232,25050,25051],{"style":23456},[19,25052,25053],{},"        {",[2232,25055,25056],{"style":23444},[19,25057,25058,25059,25061,25062,25065,25066,7815],{},"            ",[4215,25060,15223],{"style":23447}," (HttpContext.Current.Request.Form[",[4215,25063,25064],{"style":23512},"\"Message\"","] != ",[4215,25067,25068],{"style":23447},"null",[2232,25070,25071],{"style":23456},[19,25072,25073],{},"                LabelID.Text = ",[2232,25075,25076],{"style":23444},[19,25077,25078,25079,25081],{},"                    HttpContext.Current.Request.Form[",[4215,25080,25064],{"style":23512},"].ToString();",[2232,25083,25084],{"style":23456},[19,25085,23797],{},[2232,25087,25088],{"style":23456},[19,25089,23820],{},[2232,25091,25092],{"style":23444},[19,25093,8422],{},[2232,25095,25096],{"style":23456},[19,25097,24942],{},[2232,25099,25100],{"style":23444},[19,25101,23506],{},[2232,25103,25104],{"style":23456},[19,25105,23509,25106,23352,25108,8850],{},[4215,25107,23513],{"style":23512},[4215,25109,8839],{"style":23512},[2232,25111,25112],{"style":23444},[19,25113,25114],{},"    \u003Cdiv>",[2232,25116,25117],{"style":23456},[19,25118,25119],{},"        \u003Ch1>WebRequestPost Target\u003C\u002Fh1>",[2232,25121,25122],{"style":23456},[19,25123,25124],{},"        \u003Cp>",[2232,25126,25127],{"style":23444},[19,25128,25129,25130,13053],{},"            \u003Casp:Textbox id=",[4215,25131,25132],{"style":23512},"\"LabelID\"",[2232,25134,25135],{"style":23456},[19,25136,25137,25138,23352,25140,24060],{},"                Text=",[4215,25139,24148],{"style":23512},[4215,25141,8839],{"style":23512},[2232,25143,25144],{"style":23444},[19,25145,25146],{},"        \u003C\u002Fp>",[2232,25148,25149],{"style":23444},[19,25150,25151],{},"        Yes, I got your POST Web request!",[2232,25153,25154],{"style":23444},[19,25155,25156],{},"    \u003C\u002Fdiv>",[2232,25158,25159],{"style":23456},[19,25160,23638],{},[2232,25162,25163],{"style":23444},[19,25164,23641],{},[2232,25166,25167],{"style":23456},[19,25168,24975],{},[156,25170],{"style":15880,"src":25171,"alt":1080},"\u002Farticles\u002Fimages\u002Fajax.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":25173},[],"2015-04-20T08:07:16.5000000-04:00","There are many options within the Microsoft stack of products for AJAX type functionality.  The following article covers the primary mechanisms that utilize the Microsoft out of the box Ajax functionality.  Ajax must be one of the technologies used in all current web applications.  The primary benefit is the improved user experience by providing quick, responsive feedback. Core features include Ajax Client Libraries and Ajax Server Controls.",{},"\u002Farticles\u002Fmicrosoft-ajax-features-and-implementation-samples",{"title":23271,"description":25175},"articles\u002Fmicrosoft-ajax-features-and-implementation-samples",[8994],"z4UUBACfZQdvJHc_1kqU_wGEoJgjO1kJ2Q4ROa2yb4M",{"id":25183,"title":25184,"author":8,"body":25185,"createdAt":25353,"description":1915,"extension":1101,"img":25350,"meta":25354,"navigation":1104,"path":25355,"seo":25356,"stem":25357,"tags":25358,"updatedAt":25353,"__hash__":25359},"articles\u002Farticles\u002Flist-indexes-in-sql-server.md","List Indexes in SQL Server",{"type":10,"value":25186,"toc":25351},[25187,25198,25340,25344,25346,25348],[16,25188,25189,25190,25193,25194,25197],{},"The following SQL will list all indexes in within the database that you run the sql script.  I was looking for the option within Visual Studio - Data Dude add-on that displayed index differences between two databases.  I eventually discovered the line by line index comparison by exploding the Table-Indexes ",[19,25191,25192],{},"however"," I was unable to create the newly added script index in the 2nd database.  ",[19,25195,25196],{},"Is this possible? ","  In lieu of the shortcomings within Data-Dude I used the following script to manually compare and script the indexes in both databases.",[2232,25199,25201,25206,25207,25211,25212,25214,25218,25220,25224,25225,25227,25231,25232,25234,25238,25239,25243,25245,25249,25250,25254,25255,25268,25328],{"className":25200},[15370],[4215,25202,25205],{"className":25203},[25204],"kwrd","DECLARE"," GetTables ",[4215,25208,25210],{"className":25209},[25204],"CURSOR"," READ_ONLY",[1118,25213],{},[4215,25215,25217],{"className":25216},[25204],"FOR",[1118,25219],{},[4215,25221,25223],{"className":25222},[25204],"  SELECT"," TABLE_NAME",[1118,25226],{},[4215,25228,25230],{"className":25229},[25204],"  FROM"," INFORMATION_SCHEMA.TABLES",[1118,25233],{},[4215,25235,25237],{"className":25236},[25204],"  WHERE"," TABLE_TYPE = ",[4215,25240,25242],{"className":25241},[23350],"'BASE TABLE'",[1118,25244],{},[4215,25246,25248],{"className":25247},[25204],"  AND"," OBJECTPROPERTY (OBJECT_ID(TABLE_NAME), ",[4215,25251,25253],{"className":25252},[23350],"'IsMSShipped'",") = 0",[16,25256,25257,25260,25261,25263,25267],{},[4215,25258,25205],{"className":25259},[25204]," @TableName sysname",[1118,25262],{},[4215,25264,25266],{"className":25265},[25204],"OPEN"," GetTables",[16,25269,25270,11776,25274,11776,25278,25206,25282,25286,25287,25289,25293,25294,25296,25300,25302,25306,25307,25309,11776,25313,11776,25316,25206,25319,25286,25322,25324],{},[4215,25271,25273],{"className":25272},[25204],"FETCH",[4215,25275,25277],{"className":25276},[25204],"NEXT",[4215,25279,25281],{"className":25280},[25204],"FROM",[4215,25283,25285],{"className":25284},[25204],"INTO"," @TableName",[1118,25288],{},[4215,25290,25292],{"className":25291},[25204],"WHILE"," (@@fetch_status = 0)",[1118,25295],{},[4215,25297,25299],{"className":25298},[25204],"BEGIN",[1118,25301],{},[4215,25303,25305],{"className":25304},[25204],"  EXEC"," sp_helpindex @TableName",[1118,25308],{},[4215,25310,25312],{"className":25311},[25204],"  FETCH",[4215,25314,25277],{"className":25315},[25204],[4215,25317,25281],{"className":25318},[25204],[4215,25320,25285],{"className":25321},[25204],[1118,25323],{},[4215,25325,25327],{"className":25326},[25204],"END",[16,25329,25330,25267,25334,25336,25267],{},[4215,25331,25333],{"className":25332},[25204],"CLOSE",[1118,25335],{},[4215,25337,25339],{"className":25338},[25204],"DEALLOCATE",[4682,25341,25343],{"type":25342},"text\u002Fcss","\u003C![CDATA[csharpcode, .csharpcode pre  \n{  \n    font-size: small;  \n    color: black;  \n    font-family: consolas, \"Courier New\", courier, monospace;  \n    background-color: #ffffff;  \n    \u002F*white-space: pre;*\u002F  \n}  \n.csharpcode pre { margin: 0em; }  \n.csharpcode .rem { color: #008000; }  \n.csharpcode .kwrd { color: #0000ff; }  \n.csharpcode .str { color: #006080; }  \n.csharpcode .op { color: #0000c0; }  \n.csharpcode .preproc { color: #cc6633; }  \n.csharpcode .asp { background-color: #ffff00; }  \n.csharpcode .html { color: #800000; }  \n.csharpcode .attr { color: #ff0000; }  \n.csharpcode .alt   \n{  \n    background-color: #f4f4f4;  \n    width: 100%;  \n    margin: 0em;  \n}  \n.csharpcode .lnum { color: #606060; }  \n]]>",[4682,25345,25343],{"type":25342},[4682,25347,25343],{"type":25342},[156,25349],{"src":25350,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fsql2.gif",{"title":1080,"searchDepth":1081,"depth":1081,"links":25352},[],"2015-04-20T08:07:16.3900000-04:00",{},"\u002Farticles\u002Flist-indexes-in-sql-server",{"title":25184,"description":1915},"articles\u002Flist-indexes-in-sql-server",[8743],"PGhMpQ4KuNvCDC6fMPyQW3tunnAqa0GtOS8pvrjfWbo",{"id":25361,"title":25362,"author":8,"body":25363,"createdAt":26329,"description":26330,"extension":1101,"img":26326,"meta":26331,"navigation":1104,"path":26332,"seo":26333,"stem":26334,"tags":26335,"updatedAt":26329,"__hash__":26336},"articles\u002Farticles\u002Fexport-sql-data-to-microsoft-excel-using-visual-studio-2008-c.md","Export SQL Data to Microsoft Excel (using Visual Studio 2008, c#)",{"type":10,"value":25364,"toc":26327},[25365,25374,25388,25490,25557,25560,25588,25690,25818,26051,26202,26267,26324],[16,25366,25367,25368,25370,25371,25373],{},"Over the years there have been a number of methods to move SQL data into Microsoft Excel.  Using Automation you can call methods and properties that are specific to excel which gives you the greatest flexibility for specifying the location of your data in the workbook.  The following are two recent approaches to export Sql Server table row data to an excel workbook. ",[1118,25369],{},"\n1.) Using Automation you can use transfer data cell by cell",[1118,25372],{},"\n2.) Transfer data in an array to a range of cells",[16,25375,25376,25377,25379,25380,14501,25382,25384,25385,25387],{},"I created a WPF application with a button \"Export\" for this code.  The click event creates performs the the following actions",[1118,25378],{},"\na.) Gets a reference to the automation object\nb.) Adds a default workbook\nc.) Gets the list of tables within the database\nd.) Gets data\ne.) Exports the data to excel worksheets (there are 2 methods defined (1) range method (2) cell by cell\nf.) Saves the excel sheet\ng.) Clean up",[1118,25381],{},[1118,25383],{},"\nThis blog posts shows two ways to extract data from SQL Server and place into an Excel document. The Range method was much quicker than the cell by cell approach.  The code below gets a list of all tables within a particular SQL Database and exports the data to Excel. ",[1118,25386],{},"\nI didn’t use was Excel 2007 document format at this.  If you have a good post or web link using this technique I would happily reference.  Let me know if you would like the Visual Studio project.",[9636,25389,10274,25392,10274],{"id":25390,"style":25391},"codeSnippetWrapper","text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,25393,10274,25396,10274,10274,25407,10274,10274,25414,10274,10274,25416,10274,10274,25419,10274,10274,25424,10274,10274,25426,10274,10274,25431,10274,10274,25434,10274,10274,25436,10274,11776,10274,25439,10274,10274,25444,10274,10274,25449,10274,10274,25456,10274,10274,25458,10274,10274,25463,10274,11776,10274,25468,10274,10274,25476,10274,10274,25479,10274,10274,25482,10274,10274,25488,10274],{"id":25394,"style":25395},"codeSnippet","text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,25397,25399,11776,25401,25403,25404,25406],{"style":25398},"text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[4215,25400,15019],{"style":23447},[4215,25402,21296],{"style":23447}," btnExport_Click(",[4215,25405,23468],{"style":23447}," sender, RoutedEventArgs e) {",[2232,25408,25410,25411,15454],{"style":25409},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;","    lblMessage.Content=",[4215,25412,25413],{"style":23512},"\"Export Started..\"",[2232,25415,8422],{"style":25398},[2232,25417,25418],{"style":25409},"    WpfApplication.DoEvents();",[2232,25420,25421,25422,24433],{"style":25398},"    ApplicationClass app = CreateExcelDocument(",[4215,25423,9854],{"style":23447},[2232,25425,8422],{"style":25409},[2232,25427,11983,25428],{"style":25398},[4215,25429,25430],{"style":24383},"\u002F\u002Fadd workbook to excel document",[2232,25432,25433],{"style":25409},"    Workbook workbook = app.Workbooks.Add(Type.Missing);",[2232,25435,8422],{"style":25398},[2232,25437,25438],{"style":25409},"    DataSet ds = GetData(GetTableList());            ",[2232,25440,11983,25441],{"style":25409},[4215,25442,25443],{"style":24383},"\u002F\u002Fshown below are 2 method of moving data from sql to excel, only use one of them",[2232,25445,11983,25446],{"style":25398},[4215,25447,25448],{"style":24383},"\u002F\u002F(1)call method to export to worksheet using range functionality (much faster than cell by cell method",[2232,25450,25451,25452,25455],{"style":25409},"    Export(ds, ",[4215,25453,25454],{"style":23447},"ref"," workbook);",[2232,25457,8422],{"style":25398},[2232,25459,11983,25460],{"style":25409},[4215,25461,25462],{"style":24383},"\u002F\u002F(2)cell by cell method",[2232,25464,11983,25465],{"style":25398},[4215,25466,25467],{"style":24383},"\u002F\u002FInsertIntoExcel(app, ds);",[2232,25469,12886,25470,25472,25473,15454],{"style":25398},[4215,25471,15022],{"style":23447}," fileName = ",[4215,25474,25475],{"style":23512},"@\"C:\\Safety3.xlsx\"",[2232,25477,25478],{"style":25409},"     SaveDoc(workbook, fileName);",[2232,25480,25481],{"style":25398},"     CloseExcelDocument(app);",[2232,25483,25484,25485,15454],{"style":25409},"     lblMessage.Content = ",[4215,25486,25487],{"style":23512},"\"Finished..\"",[2232,25489,23497],{"style":25398},[9636,25491,10274,25492,10274],{"id":25390,"style":25391},[9636,25493,10274,25494,10274,10274,25499,10274,10274,25504,10274,10274,25509,10274,10274,25517,10274,10274,25522,10274,10274,25527,10274,10274,25533,10274,10274,25536,10274,10274,25538,10274,10274,25545,10274,10274,25548,10274,10274,25550,10274,10274,25555,10274],{"id":25394,"style":25395},[2232,25495,25496],{"style":25398},[4215,25497,25498],{"style":24383},"\u002F\u002F\u002F \u003Csummary>",[2232,25500,25501],{"style":25409},[4215,25502,25503],{"style":24383},"\u002F\u002F\u002F creates excel document",[2232,25505,25506],{"style":25398},[4215,25507,25508],{"style":24383},"\u002F\u002F\u002F \u003C\u002Fsummary>",[2232,25510,25511,25513,25514,25516],{"style":25409},[4215,25512,15019],{"style":23447}," ApplicationClass CreateExcelDocument(",[4215,25515,15210],{"style":23447}," visible) {",[2232,25518,25519,25520,15454],{"style":25398},"    ApplicationClass app = ",[4215,25521,25068],{"style":23447},[2232,25523,11983,25524,12465],{"style":25409},[4215,25525,25526],{"style":23447},"try",[2232,25528,25529,25530,25532],{"style":25398},"        app = ",[4215,25531,14601],{"style":23447}," Microsoft.Office.Interop.Excel.ApplicationClass();",[2232,25534,25535],{"style":25409},"        app.Visible = visible;",[2232,25537,8422],{"style":25398},[2232,25539,25540,25541,25544],{"style":25409},"    } ",[4215,25542,25543],{"style":23447},"catch"," (Exception ex) {",[2232,25546,25547],{"style":25398},"        MessageBox.Show(ex.ToString());",[2232,25549,23478],{"style":25409},[2232,25551,11983,25552,25554],{"style":25398},[4215,25553,15052],{"style":23447}," app;",[2232,25556,23497],{"style":25409},[16,25558,25559],{},"c.) The following method GetTableList() returns a List\u003CExportInfo> where ExportInfo is a structure that has the Name and SQL to be used for each table to be exported.",[9636,25561,10274,25562,10274],{"id":25390},[9636,25563,10274,25565,10274,10274,25572,10274,10274,25579,10274,10274,25586,10274],{"id":25394,"style":25564},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 63px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,25566,25567,11776,25569,25571],{"style":25398},[4215,25568,14963],{"style":23447},[4215,25570,14966],{"style":23447}," ExportInfo {",[2232,25573,11983,25574,11776,25576,25578],{"style":25409},[4215,25575,14963],{"style":23447},[4215,25577,15022],{"style":23447}," Name { get; set; }",[2232,25580,11983,25581,11776,25583,25585],{"style":25398},[4215,25582,14963],{"style":23447},[4215,25584,15022],{"style":23447}," Sql { get; set; }",[2232,25587,23497],{"style":25409},[9636,25589,10274,25591,10274],{"id":25390,"style":25590},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 324px; max-height: 350px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,25592,10274,25593,10274,10274,25597,10274,10274,25602,10274,10274,25606,10274,10274,25611,10274,10274,25616,10274,10274,25625,10274,11776,10274,25634,10274,10274,25637,10274,10274,25643,10274,10274,25646,10274,10274,25649,10274,10274,25652,10274,10274,25654,10274,10274,25656,10274,10274,25662,10274,10274,25671,10274,10274,25681,10274,10274,25683,10274,10274,25688,10274],{"id":25394,"style":25395},[2232,25594,25595],{"style":25398},[4215,25596,25498],{"style":24383},[2232,25598,25599],{"style":25409},[4215,25600,25601],{"style":24383},"\u002F\u002F\u002F get list of sql tables in database",[2232,25603,25604],{"style":25398},[4215,25605,25508],{"style":24383},[2232,25607,25608],{"style":25409},[4215,25609,25610],{"style":24383},"\u002F\u002F\u002F \u003Creturns>list of ExportInfo objects\u003C\u002Freturns>",[2232,25612,25613,25615],{"style":25398},[4215,25614,15019],{"style":23447}," List\u003CExportInfo> GetTableList() {",[2232,25617,25618,25619,25621,25622,24433],{"style":25409},"    System.Data.DataTable tables = ",[4215,25620,14601],{"style":23447}," System.Data.DataTable(",[4215,25623,25624],{"style":23512},"\"Tables\"",[2232,25626,11983,25627,25630,25631,25633],{"style":25398},[4215,25628,25629],{"style":23447},"using"," (SqlConnection connection = ",[4215,25632,14601],{"style":23447}," SqlConnection(GetConnectionString())) {",[2232,25635,25636],{"style":25398},"        SqlCommand command = connection.CreateCommand();",[2232,25638,25639,25640,15454],{"style":25409},"        command.CommandText = ",[4215,25641,25642],{"style":23512},"\"select table_name as Name from INFORMATION_SCHEMA.tables where TABLE_TYPE = 'BASE TABLE'\"",[2232,25644,25645],{"style":25398},"        connection.Open();",[2232,25647,25648],{"style":25409},"        tables.Load(command.ExecuteReader(CommandBehavior.CloseConnection));",[2232,25650,25651],{"style":25398},"        connection.Close();",[2232,25653,23478],{"style":25409},[2232,25655,8422],{"style":25398},[2232,25657,25658,25659,25661],{"style":25409},"    List\u003CExportInfo> exps = ",[4215,25660,14601],{"style":23447}," List\u003CExportInfo>();",[2232,25663,11983,25664,25667,25668,25670],{"style":25398},[4215,25665,25666],{"style":23447},"foreach"," (DataRow row ",[4215,25669,15487],{"style":23447}," tables.Rows) {",[2232,25672,25673,25674,25676,25677,25680],{"style":25409},"        exps.Add(",[4215,25675,14601],{"style":23447}," ExportInfo(){Name=row[0].ToString(), Sql = String.Format(",[4215,25678,25679],{"style":23512},"\"select top 1 * from {0}\"",",row[0].ToString())});",[2232,25682,23478],{"style":25398},[2232,25684,11983,25685,25687],{"style":25409},[4215,25686,15052],{"style":23447}," exps;            ",[2232,25689,23497],{"style":25398},[9636,25691,10274,25693,10274],{"id":25390,"style":25692},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 247px; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,25694,10274,25695,10274,10274,25699,10274,10274,25704,10274,10274,25708,10274,10274,25713,10274,10274,25718,10274,10274,25723,10274,10274,25729,10274,10274,25737,10274,10274,25745,10274,10274,25751,10274,10274,25753,10274,10274,25755,10274,10274,25760,10274,10274,25766,10274,10274,25772,10274,10274,25776,10274,10274,25779,10274,10274,25783,10274,10274,25785,10274,10274,25787,10274,10274,25789,10274,10274,25795,10274,10274,25803,10274,10274,25806,10274,10274,25809,10274,10274,25811,10274,10274,25816,10274],{"id":25394,"style":25395},[2232,25696,25697],{"style":25398},[4215,25698,25498],{"style":24383},[2232,25700,25701],{"style":25409},[4215,25702,25703],{"style":24383},"\u002F\u002F\u002F get data from sql server",[2232,25705,25706],{"style":25398},[4215,25707,25508],{"style":24383},[2232,25709,25710],{"style":25409},[4215,25711,25712],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"exps\">\u003C\u002Fparam>",[2232,25714,25715],{"style":25398},[4215,25716,25717],{"style":24383},"\u002F\u002F\u002F \u003Creturns>dataset with return results\u003C\u002Freturns>",[2232,25719,25720,25722],{"style":25409},[4215,25721,15019],{"style":23447}," System.Data.DataSet GetData(List\u003CExportInfo> exps) {",[2232,25724,25725,25726,25728],{"style":25398},"    DataSet ds = ",[4215,25727,14601],{"style":23447}," DataSet();",[2232,25730,11983,25731,25733,25734,25736],{"style":25409},[4215,25732,15022],{"style":23447}," executeSql = ",[4215,25735,15022],{"style":23447},".Empty;",[2232,25738,11983,25739,25741,25742,25744],{"style":25398},[4215,25740,25666],{"style":23447}," (ExportInfo exp ",[4215,25743,15487],{"style":23447}," exps) {",[2232,25746,25747,25748,15454],{"style":25409},"        executeSql += exp.Sql + ",[4215,25749,25750],{"style":23512},"\";\"",[2232,25752,23478],{"style":25398},[2232,25754,8422],{"style":25409},[2232,25756,11983,25757,25759],{"style":25398},[4215,25758,15022],{"style":23447}," connectionString = GetConnectionString();",[2232,25761,25762,25763,25765],{"style":25409},"    SqlConnection conn = ",[4215,25764,14601],{"style":23447}," SqlConnection(connectionString);",[2232,25767,25768,25769,25771],{"style":25398},"    SqlDataAdapter adapter = ",[4215,25770,14601],{"style":23447}," SqlDataAdapter(executeSql, conn);",[2232,25773,11983,25774,12465],{"style":25409},[4215,25775,25526],{"style":23447},[2232,25777,25778],{"style":25398},"        adapter.Fill(ds);",[2232,25780,25540,25781,25544],{"style":25409},[4215,25782,25543],{"style":23447},[2232,25784,8422],{"style":25398},[2232,25786,23478],{"style":25409},[2232,25788,8422],{"style":25398},[2232,25790,11983,25791,25794],{"style":25409},[4215,25792,25793],{"style":23447},"int"," index = 0;",[2232,25796,11983,25797,25799,25800,25802],{"style":25398},[4215,25798,25666],{"style":23447}," (System.Data.DataTable dt ",[4215,25801,15487],{"style":23447}," ds.Tables) {",[2232,25804,25805],{"style":25409},"        dt.TableName = exps[index].Name;",[2232,25807,25808],{"style":25398},"        index += 1;",[2232,25810,23478],{"style":25409},[2232,25812,11983,25813,25815],{"style":25398},[4215,25814,15052],{"style":23447}," ds;",[2232,25817,23497],{"style":25409},[9636,25819,10274,25821,10274],{"id":25390,"style":25820},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 500px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,25822,10274,25823,10274,10274,25827,10274,10274,25832,10274,10274,25836,10274,10274,25841,10274,10274,25846,10274,10274,25856,10274,10274,25858,10274,10274,25863,10274,10274,25865,10274,10274,25870,10274,10274,25877,10274,10274,25879,10274,10274,25884,10274,10274,25894,10274,10274,25896,10274,10274,25901,10274,10274,25909,10274,10274,25912,10274,10274,25914,10274,10274,25916,10274,10274,25921,10274,10274,25927,10274,10274,25934,10274,10274,25937,10274,10274,25940,10274,10274,25942,10274,10274,25944,10274,10274,25949,10274,10274,25956,10274,10274,25964,10274,10274,25969,10274,10274,25971,10274,10274,25976,10274,10274,25979,10274,10274,25982,10274,10274,25984,10274,10274,25986,10274,10274,25989,10274,10274,25992,10274,10274,25994,10274,10274,25999,10274,10274,26002,10274,10274,26005,10274,10274,26007,10274,10274,26013,10274,10274,26015,10274,10274,26020,10274,10274,26032,10274,10274,26035,10274,10274,26037,10274,10274,26042,10274,10274,26047,10274,10274,26049,10274],{"id":25394,"style":25395},[2232,25824,25825],{"style":25398},[4215,25826,25498],{"style":24383},[2232,25828,25829],{"style":25409},[4215,25830,25831],{"style":24383},"\u002F\u002F\u002F Copy data from dataset into workbook",[2232,25833,25834],{"style":25398},[4215,25835,25508],{"style":24383},[2232,25837,25838],{"style":25409},[4215,25839,25840],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"dataSet\">\u003C\u002Fparam>",[2232,25842,25843],{"style":25398},[4215,25844,25845],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"excelWorkbook\">\u003C\u002Fparam>        ",[2232,25847,25848,11776,25850,25852,25853,25855],{"style":25409},[4215,25849,15019],{"style":23447},[4215,25851,21296],{"style":23447}," Export(DataSet dataSet, ",[4215,25854,25454],{"style":23447}," Workbook excelWorkbook) {",[2232,25857,8422],{"style":25398},[2232,25859,11983,25860,25862],{"style":25409},[4215,25861,25793],{"style":23447}," sheetIndex = 0;",[2232,25864,8422],{"style":25398},[2232,25866,11983,25867],{"style":25409},[4215,25868,25869],{"style":24383},"\u002F\u002F build rawData 2 dimensional array with data for each datatable            ",[2232,25871,11983,25872,25799,25874,25876],{"style":25398},[4215,25873,25666],{"style":23447},[4215,25875,15487],{"style":23447}," dataSet.Tables) {",[2232,25878,8422],{"style":25409},[2232,25880,12818,25881],{"style":25398},[4215,25882,25883],{"style":24383},"\u002F\u002F Copy the DataTable to an object array",[2232,25885,12818,25886,25888,25889,11776,25891,25893],{"style":25409},[4215,25887,23468],{"style":23447},"[,] data = ",[4215,25890,14601],{"style":23447},[4215,25892,23468],{"style":23447},"[dt.Rows.Count + 1, dt.Columns.Count];",[2232,25895,8422],{"style":25398},[2232,25897,12818,25898],{"style":25409},[4215,25899,25900],{"style":24383},"\u002F\u002F Copy the column names to the first row of the object array",[2232,25902,12818,25903,15468,25906,25908],{"style":25398},[4215,25904,25905],{"style":23447},"for",[4215,25907,25793],{"style":23447}," col = 0; col \u003C dt.Columns.Count; col++) {",[2232,25910,25911],{"style":25409},"            data[0, col] = dt.Columns[col].ColumnName;",[2232,25913,23797],{"style":25398},[2232,25915,8422],{"style":25409},[2232,25917,12818,25918],{"style":25398},[4215,25919,25920],{"style":24383},"\u002F\u002F Copy the values to the object array",[2232,25922,12818,25923,15468,25925,25908],{"style":25409},[4215,25924,25905],{"style":23447},[4215,25926,25793],{"style":23447},[2232,25928,25058,25929,15468,25931,25933],{"style":25398},[4215,25930,25905],{"style":23447},[4215,25932,25793],{"style":23447}," row = 0; row \u003C dt.Rows.Count; row++) {",[2232,25935,25936],{"style":25409},"                data[row + 1, col] = dt.Rows[row].ItemArray[col];",[2232,25938,25939],{"style":25398},"            }",[2232,25941,23797],{"style":25409},[2232,25943,8422],{"style":25398},[2232,25945,12818,25946],{"style":25409},[4215,25947,25948],{"style":24383},"\u002F\u002F Calculate the final column letter",[2232,25950,12818,25951,25953,25954,25736],{"style":25398},[4215,25952,15022],{"style":23447}," finalColLetter = ",[4215,25955,15022],{"style":23447},[2232,25957,12818,25958,25960,25961,15454],{"style":25409},[4215,25959,15022],{"style":23447}," colCharset = ",[4215,25962,25963],{"style":23512},"\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"",[2232,25965,12818,25966,25968],{"style":25398},[4215,25967,25793],{"style":23447}," colCharsetLen = colCharset.Length;",[2232,25970,8422],{"style":25409},[2232,25972,12818,25973,25975],{"style":25398},[4215,25974,15223],{"style":23447}," (dt.Columns.Count > colCharsetLen) {",[2232,25977,25978],{"style":25409},"            finalColLetter = colCharset.Substring(",[2232,25980,25981],{"style":25398},"                (dt.Columns.Count - 1) \u002F colCharsetLen - 1, 1);",[2232,25983,23797],{"style":25409},[2232,25985,8422],{"style":25398},[2232,25987,25988],{"style":25409},"        finalColLetter += colCharset.Substring(",[2232,25990,25991],{"style":25398},"                (dt.Columns.Count - 1) % colCharsetLen, 1);",[2232,25993,8422],{"style":25409},[2232,25995,12818,25996],{"style":25398},[4215,25997,25998],{"style":24383},"\u002F\u002F Create a new Sheet",[2232,26000,26001],{"style":25409},"        Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(excelWorkbook.Sheets.get_Item(++sheetIndex),",[2232,26003,26004],{"style":25398},"                                                                    Type.Missing, 1, XlSheetType.xlWorksheet);",[2232,26006,8422],{"style":25409},[2232,26008,26009,26010],{"style":25398},"        excelSheet.Name = dt.TableName; ",[4215,26011,26012],{"style":24383},"\u002F\u002F name new sheet name of table",[2232,26014,8422],{"style":25409},[2232,26016,12818,26017],{"style":25398},[4215,26018,26019],{"style":24383},"\u002F\u002F Fast data export to Excel",[2232,26021,12818,26022,26024,26025,26027,26028,26031],{"style":25409},[4215,26023,15022],{"style":23447}," excelRange = ",[4215,26026,15022],{"style":23447},".Format(",[4215,26029,26030],{"style":23512},"\"A1:{0}{1}\"",", finalColLetter, dt.Rows.Count + 1);",[2232,26033,26034],{"style":25398},"        excelSheet.get_Range(excelRange, Type.Missing).Value2 = data;",[2232,26036,8422],{"style":25409},[2232,26038,12818,26039],{"style":25398},[4215,26040,26041],{"style":24383},"\u002F\u002F Mark the first row as BOLD",[2232,26043,26044,26045,15454],{"style":25409},"        ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = ",[4215,26046,15236],{"style":23447},[2232,26048,23478],{"style":25398},[2232,26050,23497],{"style":25409},[9636,26052,10274,26053,10274],{"id":25390,"style":25391},[9636,26054,10274,26055,10274,10274,26059,10274,10274,26064,10274,10274,26068,10274,10274,26073,10274,10274,26078,10274,10274,26085,10274,10274,26091,10274,10274,26094,10274,10274,26097,10274,10274,26099,10274,10274,26104,10274,10274,26109,10274,10274,26116,10274,11776,10274,26120,10274,10274,26123,10274,10274,26131,10274,10274,26134,10274,10274,26137,10274,10274,26139,10274,10274,26141,10274,10274,26144,10274,10274,26151,10274,10274,26154,10274,10274,26157,10274,10274,26164,10274,10274,26167,10274,10274,26170,10274,10274,26173,10274,10274,26175,10274,10274,26180,10274,10274,26182,10274,10274,26193,10274,10274,26195,10274,10274,26200,10274],{"id":25394,"style":25395},[2232,26056,26057],{"style":25398},[4215,26058,25498],{"style":24383},[2232,26060,26061],{"style":25409},[4215,26062,26063],{"style":24383},"\u002F\u002F\u002F inserts data into excel row by row",[2232,26065,26066],{"style":25398},[4215,26067,25508],{"style":24383},[2232,26069,26070],{"style":25409},[4215,26071,26072],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"excel\">\u003C\u002Fparam>",[2232,26074,26075],{"style":25398},[4215,26076,26077],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"ds\">\u003C\u002Fparam>",[2232,26079,26080,11776,26082,26084],{"style":25409},[4215,26081,15019],{"style":23447},[4215,26083,21296],{"style":23447}," InsertIntoExcel(Microsoft.Office.Interop.Excel.Application excel, System.Data.DataSet ds) {",[2232,26086,11983,26087,25799,26089,25802],{"style":25398},[4215,26088,25666],{"style":23447},[4215,26090,15487],{"style":23447},[2232,26092,26093],{"style":25409},"        Microsoft.Office.Interop.Excel.Worksheet theSheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.Workbooks[1].Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);",[2232,26095,26096],{"style":25398},"        theSheet.Name = dt.TableName;",[2232,26098,8422],{"style":25409},[2232,26100,12818,26101,26103],{"style":25398},[4215,26102,25793],{"style":23447}," colIndex = 0;",[2232,26105,12818,26106,26108],{"style":25409},[4215,26107,25793],{"style":23447}," rowIndex = 1;",[2232,26110,12818,26111,26113,26114,25736],{"style":25398},[4215,26112,15022],{"style":23447}," err = ",[4215,26115,15022],{"style":23447},[2232,26117,12818,26118,12465],{"style":25409},[4215,26119,25526],{"style":23447},[2232,26121,26122],{"style":25409},"            colIndex = 0;",[2232,26124,25058,26125,26127,26128,26130],{"style":25398},[4215,26126,25666],{"style":23447}," (DataColumn col ",[4215,26129,15487],{"style":23447}," dt.Columns) {",[2232,26132,26133],{"style":25409},"                colIndex += 1;",[2232,26135,26136],{"style":25398},"                excel.Cells[1, colIndex] = col.ColumnName;",[2232,26138,25939],{"style":25409},[2232,26140,8422],{"style":25398},[2232,26142,26143],{"style":25409},"            rowIndex = 1;",[2232,26145,25058,26146,25667,26148,26150],{"style":25398},[4215,26147,25666],{"style":23447},[4215,26149,15487],{"style":23447}," dt.Rows) {",[2232,26152,26153],{"style":25409},"                rowIndex += 1;",[2232,26155,26156],{"style":25398},"                colIndex = 0;",[2232,26158,26159,26160,26127,26162,26130],{"style":25409},"                ",[4215,26161,25666],{"style":23447},[4215,26163,15487],{"style":23447},[2232,26165,26166],{"style":25398},"                    colIndex += 1;",[2232,26168,26169],{"style":25409},"                    excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();",[2232,26171,26172],{"style":25398},"                }",[2232,26174,25939],{"style":25409},[2232,26176,26177,26178,25544],{"style":25398},"        } ",[4215,26179,25543],{"style":23447},[2232,26181,8422],{"style":25409},[2232,26183,26184,26185,26188,26189,26192],{"style":25398},"            err += ",[4215,26186,26187],{"style":23512},"\"RowIndex=\""," + rowIndex.ToString() + ",[4215,26190,26191],{"style":23512},"\" ColIndex=\""," + colIndex.ToString();",[2232,26194,23797],{"style":25409},[2232,26196,25540,26197],{"style":25398},[4215,26198,26199],{"style":24383},"\u002F\u002F next ",[2232,26201,23497],{"style":25409},[9636,26203,10274,26204,10274],{"id":25390},[9636,26205,10274,26207,10274,10274,26211,10274,10274,26216,10274,10274,26220,10274,10274,26225,10274,10274,26230,10274,10274,26240,10274,10274,26245,10274,10274,26248,10274,10274,26251,10274,10274,26254,10274,10274,26260,10274,10274,26265,10274],{"id":25394,"style":26206},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 207px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,26208,26209],{"style":25398},[4215,26210,25498],{"style":24383},[2232,26212,26213],{"style":25409},[4215,26214,26215],{"style":24383},"\u002F\u002F\u002F Save workbook to file system",[2232,26217,26218],{"style":25398},[4215,26219,25508],{"style":24383},[2232,26221,26222],{"style":25409},[4215,26223,26224],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"excelWorkbook\">\u003C\u002Fparam>",[2232,26226,26227],{"style":25398},[4215,26228,26229],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"fileName\">\u003C\u002Fparam>",[2232,26231,26232,11776,26234,26236,26237,26239],{"style":25409},[4215,26233,15019],{"style":23447},[4215,26235,21296],{"style":23447}," SaveDoc(Workbook excelWorkbook, ",[4215,26238,15022],{"style":23447}," fileName) {",[2232,26241,11983,26242],{"style":25398},[4215,26243,26244],{"style":24383},"\u002F\u002F Save and Close the Workbook",[2232,26246,26247],{"style":25409},"    excelWorkbook.SaveAs(fileName, XlFileFormat.xlWorkbookNormal, Type.Missing,",[2232,26249,26250],{"style":25398},"        Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive,",[2232,26252,26253],{"style":25409},"        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);",[2232,26255,26256,26257,26259],{"style":25398},"    excelWorkbook.Close(",[4215,26258,15236],{"style":23447},", Type.Missing, Type.Missing);",[2232,26261,26262,26263,15454],{"style":25409},"    excelWorkbook = ",[4215,26264,25068],{"style":23447},[2232,26266,23497],{"style":25398},[9636,26268,10274,26269,10274],{"id":25390},[9636,26270,10274,26271,10274,10274,26275,10274,10274,26280,10274,10274,26284,10274,10274,26289,10274,10274,26296,10274,10274,26301,10274,10274,26304,10274,10274,26309,10274,10274,26311,10274,10274,26316,10274,10274,26319,10274,10274,26322,10274],{"id":25394,"style":26206},[2232,26272,26273],{"style":25398},[4215,26274,25498],{"style":24383},[2232,26276,26277],{"style":25409},[4215,26278,26279],{"style":24383},"\u002F\u002F\u002F Clean up and close document",[2232,26281,26282],{"style":25398},[4215,26283,25508],{"style":24383},[2232,26285,26286],{"style":25409},[4215,26287,26288],{"style":24383},"\u002F\u002F\u002F \u003Cparam name=\"excelApp\">\u003C\u002Fparam>",[2232,26290,26291,11776,26293,26295],{"style":25398},[4215,26292,15019],{"style":23447},[4215,26294,21296],{"style":23447}," CloseExcelDocument(ApplicationClass excelApp) {",[2232,26297,11983,26298],{"style":25409},[4215,26299,26300],{"style":24383},"\u002F\u002F Release the Application object",[2232,26302,26303],{"style":25398},"    excelApp.Quit();",[2232,26305,26306,26307,15454],{"style":25409},"    excelApp = ",[4215,26308,25068],{"style":23447},[2232,26310,8422],{"style":25398},[2232,26312,11983,26313],{"style":25409},[4215,26314,26315],{"style":24383},"\u002F\u002F Collect the unreferenced objects",[2232,26317,26318],{"style":25398},"    GC.Collect();",[2232,26320,26321],{"style":25409},"    GC.WaitForPendingFinalizers();",[2232,26323,23497],{"style":25398},[156,26325],{"style":15880,"src":26326,"alt":1080},"\u002Farticles\u002Fimages\u002Fexport.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":26328},[],"2015-04-20T08:07:16.2600000-04:00","How to migrate data to Excel.",{},"\u002Farticles\u002Fexport-sql-data-to-microsoft-excel-using-visual-studio-2008-c",{"title":25362,"description":26330},"articles\u002Fexport-sql-data-to-microsoft-excel-using-visual-studio-2008-c",[7873],"WrTKgWupiJpRf38vBT1Ecbke8nc6PFnUO6TDGtQ-kK8",{"id":26338,"title":26339,"author":8,"body":26340,"createdAt":26609,"description":26610,"extension":1101,"img":26606,"meta":26611,"navigation":1104,"path":26612,"seo":26613,"stem":26614,"tags":26615,"updatedAt":26609,"__hash__":26616},"articles\u002Farticles\u002Fsql-coalesce-command-features.md","SQL COALESCE Command Features",{"type":10,"value":26341,"toc":26607},[26342,26345,26409,26412,26420,26449,26458,26601,26604],[16,26343,26344],{},"In order to concatenate strings (delimited by with a string) from multiple rows in a SQL Table to a single field the Coalesce command is the one to use.  Typically COALESCE is used to return a single field value which represents multiple rows concatenated by a string.",[9636,26346,10274,26347,10274],{"id":25390},[9636,26348,10274,26350,10274,10274,26360,10274,10274,26362,10274,10274,26379,10274,10274,26391,10274,10274,26396,10274,10274,26402,10274,10274,26404,10274],{"id":25394,"style":26349},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 122px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,26351,26352,26355,26356,26359],{"style":25398},[4215,26353,25205],{"style":26354},"color: #0000ff"," @EmployeeList ",[4215,26357,26358],{"style":26354},"varchar","(100)",[2232,26361,8422],{"style":25409},[2232,26363,26364,26367,26368,26371,26372,3091,26376,26378],{"style":25398},[4215,26365,26366],{"style":26354},"SELECT"," @EmployeeList = ",[4215,26369,26370],{"style":26354},"COALESCE","(@EmployeeList + ",[4215,26373,26375],{"style":26374},"color: #006080","', '",[4215,26377,22687],{"style":26374},") + ",[2232,26380,12793,26381,26384,26385,11776,26388,26390],{"style":25409},[4215,26382,26383],{"style":26354},"CAST","(Emp_UniqueID ",[4215,26386,26387],{"style":26354},"AS",[4215,26389,26358],{"style":26354},"(5))",[2232,26392,26393,26395],{"style":25398},[4215,26394,25281],{"style":26354}," SalesCallsEmployees",[2232,26397,26398,26401],{"style":25409},[4215,26399,26400],{"style":26354},"WHERE"," SalCal_UniqueID = 1",[2232,26403,8422],{"style":25398},[2232,26405,26406,26408],{"style":25409},[4215,26407,26366],{"style":26354}," @EmployeeList",[1139,26410],{"href":26411},"http:\u002F\u002F11011.net\u002Fsoftware\u002Fvspaste",[16,26413,26414,26415,26417,26418,11198],{},"The output from the following would be something like 1,2, 3",[1118,26416],{},"\nThe following example uses a function to return a joined table field with the primary data selected.  The challenge was to return a single row from one table while returning values from the joined table into a single field.  To accomplish this I used syntax similar to the following:",[1118,26419],{},[2232,26421,26423,26430,26433,26434,26436,26437,26439,26441,26444,26445,26448],{"className":26422},[2239],[4215,26424,26425,26426],{"style":14600},"SELECT ",[4215,26427,26429],{"style":26428},"color: #000000;","personID",[4215,26431,26432],{"style":21262},",","dbo",[4215,26435,1200],{"style":21262},"fn_CombineValues",[4215,26438,14616],{"style":21262},[4215,26440,26429],{"style":26428},[4215,26442,26443],{"style":21262},") ","Roles  \n  ",[4215,26446,26447],{"style":14600},"FROM ","[People]",[16,26450,26451,26453,14501,26455,26457],{},[1139,26452],{"href":26411},[1118,26454],{},[1118,26456],{},"\nThe following function was created to support the above sql query.  The function accepts the key to be used in the the joined table and returns a string value representing in this case the roles related to the primary table.",[9636,26459,10274,26460,10274],{"id":25390},[9636,26461,10274,26463,10274,10274,26472,10274,10274,26474,10274,10274,26505,10274,10274,26508,10274,10274,26517,10274,10274,26521,10274,10274,26525,10274,10274,26533,10274,10274,26535,10274,10274,26557,10274,10274,26562,10274,10274,26575,10274,10274,26582,10274,10274,26584,10274,10274,26589,10274,10274,26591,10274,10274,26596,10274,10274,26598,10274],{"id":25394,"style":26462},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 305px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,26464,26465,11776,26468,26471],{"style":25398},[4215,26466,26467],{"style":26354},"CREATE",[4215,26469,26470],{"style":26354},"FUNCTION"," fn_CombineValues",[2232,26473,15468],{"style":25409},[2232,26475,26476,26477,26480,26481,11776,26484,11776,26487,26490,26491,26494,26495,11776,26498,11776,26501,26504],{"style":25398},"     @FK_ID ",[4215,26478,26479],{"style":26354},"INT"," --The ",[4215,26482,26483],{"style":26354},"foreign",[4215,26485,26486],{"style":26354},"key",[4215,26488,26489],{"style":26354},"from"," TableA which ",[4215,26492,26493],{"style":26354},"is"," used ",[4215,26496,26497],{"style":26354},"to",[4215,26499,26500],{"style":26354},"fetch",[4215,26502,26503],{"style":26354},"corresponding"," records",[2232,26506,26507],{"style":25409}," )",[2232,26509,11776,26510,11776,26513,26516],{"style":25398},[4215,26511,26512],{"style":26354},"RETURNS",[4215,26514,26515],{"style":26354},"VARCHAR","(8000)",[2232,26518,11776,26519],{"style":25409},[4215,26520,26387],{"style":26354},[2232,26522,11776,26523],{"style":25398},[4215,26524,25299],{"style":26354},[2232,26526,11776,26527,26529,26530,26532],{"style":25409},[4215,26528,25205],{"style":26354}," @SomeColumnList ",[4215,26531,26515],{"style":26354},"(8000);",[2232,26534,8422],{"style":25398},[2232,26536,11776,26537,26539,26540,26542,26543,3091,26545,26378,26547,14616,26549,11776,26552,11776,26554,26556],{"style":25409},[4215,26538,26366],{"style":26354}," @SomeColumnList = ",[4215,26541,26370],{"style":26354},"(@SomeColumnList + ",[4215,26544,26375],{"style":26374},[4215,26546,22687],{"style":26374},[4215,26548,26383],{"style":26354},[4215,26550,26551],{"style":26354},"Role",[4215,26553,26387],{"style":26354},[4215,26555,26358],{"style":26354},"(20)) ",[2232,26558,11776,26559,26561],{"style":25398},[4215,26560,25281],{"style":26354}," dbo.SA_PeopleRoles C",[2232,26563,11776,26564,11776,26567,26570,26571,26574],{"style":25409},[4215,26565,26566],{"style":26354},"INNER",[4215,26568,26569],{"style":26354},"JOIN"," dbo.SA_Roles r ",[4215,26572,26573],{"style":26354},"ON"," r.roleid=c.RoleID",[2232,26576,26578,26579,26581],{"style":26577},"text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size\u003Cmce: script type=;",": 8pt; overflow: visible; border-style: none; padding: 0px;\"> ",[4215,26580,26400],{"style":26354}," C.personID = @FK_ID;",[2232,26583,8422],{"style":25409},[2232,26585,11776,26586,11776],{"style":25398},[4215,26587,26588],{"style":26354},"RETURN",[2232,26590,15468],{"style":25409},[2232,26592,11776,26593,26595],{"style":25398},[4215,26594,26366],{"style":26354}," @SomeColumnList",[2232,26597,26507],{"style":25409},[2232,26599,26600],{"style":25398}," END",[1139,26602,26603],{"href":26603},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F111341\u002Fcombine-multiple-results-in-a-subquery-into-a-single-comma-separated-value",[156,26605],{"src":26606,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fsql3.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":26608},[],"2015-04-20T08:07:16.1500000-04:00","Concatenate strings within SQL",{},"\u002Farticles\u002Fsql-coalesce-command-features",{"title":26339,"description":26610},"articles\u002Fsql-coalesce-command-features",[7873],"Lvcvf-IInMfPOb1Xmt4Hkny-iQtpdEQ4KhdeRiK6CKo",{"id":26618,"title":26619,"author":8,"body":26620,"createdAt":27790,"description":1915,"extension":1101,"img":27787,"meta":27791,"navigation":1104,"path":27792,"seo":27793,"stem":27794,"tags":27795,"updatedAt":27790,"__hash__":27796},"articles\u002Farticles\u002Fasp-net-updatepanel-updateprogress-controls-and-overlays-wait-messages.md","Asp.net UpdatePanel, UpdateProgress Controls and Overlays (Wait Messages)",{"type":10,"value":26621,"toc":27788},[26622,26627,26642,26648,26651,26887,26982,27128,27271,27273,27327,27329,27331,27400,27421,27424,27475,27478,27785],[16,26623,26624,26626],{},[19,26625,2294],{},": While a partial page postback is occurring disable all form fields and give the user a pleasant please wait message that can be used consistently across your application.  We need to create an overlay that works in conjunction with the updatepanel as well as direct from JavaScript.",[16,26628,26629,26632,26633,11776,26636,26639,26641],{},[19,26630,26631],{},"Problem",": Design the update progress html and css so that the entire page is overlaid with gray background.  This works pretty good ",[19,26634,26635],{},"until scrolling",[19,26637,26638],{},"on the page is involved.  When the page is tall enough that the browser scrolls the overlay must by sized dynamically with each post.  If you fail to do this, you will end up with odd visual with the overlay only covering a portion of the page.",[1118,26640],{},"\nThe problem above is resolved in the solution described within this post.  It covers the asp.net, html, css and JavaScript code to accomplish the above in re-usable fashion.",[16,26643,26644,26645,26647],{},"I was using the UpdatePanel control which enables you to build rich, client-centric web applications.  By using the UpdatePanel controls you can refresh selected parts of the page instead of refreshing the whole page with a postback.  While the partial page post back occurs an UpdateProgress control is available to provide the user with a friendly ‘please wait’ message.  This all works seamlessly out of the box. ",[1118,26646],{},"\nIn my scenario I needed to overlay and disable all controls (make unavailable) for the user while the partial page update happens.  The application allows for file uploads (which cannot participate in partial page updates).  A full post back must occur for this to work correctly. ",[16,26649,26650],{},"My ASPX page has the following structure with typical UpdatePanel, ContentTemplate, Triggers and UpdateProgress controls.  The trigger designates that the btnSubmitAdmin will perform a full postback.  I want the full postback user interaction to look similar as the partial page updates.  As a result, I will be using the same updateprogress visual for both partial and full postbacks.",[9636,26652,10274,26654,10274],{"id":25390,"style":26653},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 94.2%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 374px; max-height: 500px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,26655,10274,26656,10274,10274,26670,10274,10274,26686,10274,11776,10274,26711,10274,10274,26735,10274,11776,10274,26746,10274,11776,10274,26751,10274,10274,26760,10274,10274,26769,10274,10274,26784,10274,10274,26792,10274,11776,10274,26801,10274,10274,26835,10274,10274,26844,10274,10274,26863,10274,10274,26871,10274,10274,26879,10274],{"id":25394,"style":25395},[2232,26657,26658,26660,11776,26662,26665,26668],{"style":25398},[4215,26659,8666],{"style":23447},[4215,26661,9586],{"style":23947},[4215,26663,26664],{"style":23950},"onload",[4215,26666,26667],{"style":23447},"=\"fncOnLoad()\"",[4215,26669,8850],{"style":23447},[2232,26671,26672,26674,11776,26676,26678,11776,26680,26682,26684],{"style":25409},[4215,26673,8666],{"style":23447},[4215,26675,24015],{"style":23947},[4215,26677,24018],{"style":23950},[4215,26679,24021],{"style":23447},[4215,26681,23967],{"style":23950},[4215,26683,23970],{"style":23447},[4215,26685,8850],{"style":23447},[2232,26687,11983,26688,26690,11776,26692,26694,11776,26697,26699,11776,26701,26703,26705,26707,26709],{"style":25398},[4215,26689,8666],{"style":23447},[4215,26691,24036],{"style":23947},[4215,26693,24039],{"style":23950},[4215,26695,26696],{"style":23447},"=\"Scriptmanager1\"",[4215,26698,23967],{"style":23950},[4215,26700,23970],{"style":23447},[4215,26702,24049],{"style":23950},[4215,26704,24052],{"style":23447},[4215,26706,8821],{"style":23447},[4215,26708,24036],{"style":23947},[4215,26710,8850],{"style":23447},[2232,26712,11983,26713,26715,11776,26718,26720,11776,26723,26725,13053,26727,26730,11776,26733],{"style":25398},[4215,26714,8666],{"style":23447},[4215,26716,26717],{"style":23947},"asp:UpdatePanel",[4215,26719,24039],{"style":23950},[4215,26721,26722],{"style":23447},"=\"updatePanel1\"",[4215,26724,23967],{"style":23950},[4215,26726,23970],{"style":23447},[4215,26728,26729],{"style":23950},"UpdateMode",[4215,26731,26732],{"style":23447},"=\"Conditional\"",[4215,26734,8850],{"style":23447},[2232,26736,26737,26738,26740,26743,26745],{"style":25409},"       ",[4215,26739,8666],{"style":23447},[4215,26741,26742],{"style":23947},"ContentTemplate",[4215,26744,8850],{"style":23447},"               ",[2232,26747,12818,26748,26159],{"style":25409},[4215,26749,26750],{"style":24383},"\u003C!-- Content Goes Here -->",[2232,26752,24783,26753,26755,26757,26759],{"style":25409},[4215,26754,8902],{"style":23447},[4215,26756,26742],{"style":23947},[4215,26758,8850],{"style":23447},"              ",[2232,26761,12818,26762,26764,26767],{"style":25398},[4215,26763,8666],{"style":23447},[4215,26765,26766],{"style":23947},"Triggers",[4215,26768,8850],{"style":23447},[2232,26770,25058,26771,26773,11776,26776,26779,11776,26782,25058],{"style":25409},[4215,26772,8666],{"style":23447},[4215,26774,26775],{"style":23947},"asp:PostBackTrigger",[4215,26777,26778],{"style":23950},"ControlID",[4215,26780,26781],{"style":23447},"=\"btnSubmitAdmin\"",[4215,26783,24060],{"style":23447},[2232,26785,12818,26786,26788,26790,12886],{"style":25398},[4215,26787,8902],{"style":23447},[4215,26789,26766],{"style":23947},[4215,26791,8850],{"style":23447},[2232,26793,12793,26794,26796,26798,26800],{"style":25409},[4215,26795,8902],{"style":23447},[4215,26797,26717],{"style":23947},[4215,26799,8850],{"style":23447},"                    ",[2232,26802,12793,26803,26805,11776,26808,26810,11776,26813,26815,11776,26817,26820,11776,26822,26825,11776,26827,26830,26833],{"style":25409},[4215,26804,8666],{"style":23447},[4215,26806,26807],{"style":23947},"asp:UpdateProgress",[4215,26809,24039],{"style":23950},[4215,26811,26812],{"style":23447},"=\"UpdateProgress1\"",[4215,26814,23967],{"style":23950},[4215,26816,23970],{"style":23447},[4215,26818,26819],{"style":23950},"AssociatedUpdatePanelID",[4215,26821,26722],{"style":23447},[4215,26823,26824],{"style":23950},"DynamicLayout",[4215,26826,24052],{"style":23447},[4215,26828,26829],{"style":23950},"DisplayAfter",[4215,26831,26832],{"style":23447},"=\"1000\"",[4215,26834,8850],{"style":23447},[2232,26836,12818,26837,26839,11776,26842],{"style":25398},[4215,26838,8666],{"style":23447},[4215,26840,26841],{"style":23947},"ProgressTemplate",[4215,26843,8850],{"style":23447},[2232,26845,24134,26847,26849,11776,26852,26854,11776,26857,26859,11776,26861],{"style":26846},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 18px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[4215,26848,8666],{"style":23447},[4215,26850,26851],{"style":23947},"uc1:WaitPanel",[4215,26853,24039],{"style":23950},[4215,26855,26856],{"style":23447},"=\"WaitPanel1\"",[4215,26858,23967],{"style":23950},[4215,26860,23970],{"style":23447},[4215,26862,24060],{"style":23447},[2232,26864,12818,26865,26867,26869],{"style":25398},[4215,26866,8902],{"style":23447},[4215,26868,26841],{"style":23947},[4215,26870,8850],{"style":23447},[2232,26872,11983,26873,26875,26877,11983],{"style":25409},[4215,26874,8902],{"style":23447},[4215,26876,26807],{"style":23947},[4215,26878,8850],{"style":23447},[2232,26880,26881,26883,26885],{"style":25398},[4215,26882,8902],{"style":23447},[4215,26884,24015],{"style":23947},[4215,26886,8850],{"style":23447},[9636,26888,10274,26890,10274],{"id":25390,"style":26889},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 350px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,26891,10274,26892,10274,11776,10274,26898,10274,10274,26911,10274,10274,26924,10274,10274,26939,10274,10274,26947,10274,10274,26966,10274,10274,26974,10274],{"id":25394,"style":25395},[2232,26893,26894],{"style":25398},[4215,26895,26897],{"style":26896},"background-color: #ffff00;","\u003C%@ Control Language=\"VB\" AutoEventWireup=\"false\" CodeFile=\"WaitPanel.ascx.vb\" Inherits=\"Uc_WaitPanel\" %>",[2232,26899,12818,26900,26902,11776,26904,26906,26909],{"style":25398},[4215,26901,8666],{"style":23447},[4215,26903,9636],{"style":23947},[4215,26905,24018],{"style":23950},[4215,26907,26908],{"style":23447},"=\"OuterTableCellOverlay\"",[4215,26910,8850],{"style":23447},[2232,26912,25058,26913,26915,11776,26917,26919,26922],{"style":25409},[4215,26914,8666],{"style":23447},[4215,26916,9636],{"style":23947},[4215,26918,24018],{"style":23950},[4215,26920,26921],{"style":23447},"=\"InnerTableCellOverlay\"",[4215,26923,8850],{"style":23447},[2232,26925,26159,26926,26928,26930,26932,26933,26935,26937],{"style":25398},[4215,26927,8666],{"style":23447},[4215,26929,10696],{"style":23947},[4215,26931,8850],{"style":23447},"... Please Wait ...",[4215,26934,8902],{"style":23447},[4215,26936,10696],{"style":23947},[4215,26938,8850],{"style":23447},[2232,26940,26159,26941,26943,11776,26945],{"style":25409},[4215,26942,8666],{"style":23447},[4215,26944,1118],{"style":23947},[4215,26946,24060],{"style":23447},[2232,26948,26159,26949,26951,11776,26954,26956,11776,26958,26961,11776,26964,26159],{"style":25398},[4215,26950,8666],{"style":23447},[4215,26952,26953],{"style":23947},"asp:Image",[4215,26955,23967],{"style":23950},[4215,26957,23970],{"style":23447},[4215,26959,26960],{"style":23950},"ImageUrl",[4215,26962,26963],{"style":23447},"=\"~\u002FImages\u002Findicator_waitanim.gif\"",[4215,26965,24060],{"style":23447},[2232,26967,25058,26968,26970,26972],{"style":25409},[4215,26969,8902],{"style":23447},[4215,26971,9636],{"style":23947},[4215,26973,8850],{"style":23447},[2232,26975,12818,26976,26978,26980,13053],{"style":25398},[4215,26977,8902],{"style":23447},[4215,26979,9636],{"style":23947},[4215,26981,8850],{"style":23447},[9636,26983,10274,26984,10274],{"id":25390,"style":26889},[9636,26985,10274,26986,10274,10274,26993,10274,10274,26999,10274,10274,27001,10274,10274,27032,10274,10274,27034,10274,10274,27044,10274,10274,27050,10274,10274,27056,10274,10274,27066,10274,10274,27074,10274,10274,27082,10274,10274,27089,10274,10274,27092,10274,10274,27094,10274,10274,27108,10274,10274,27115,10274,10274,27117,10274,10274,27123,10274],{"id":25394,"style":25395},[2232,26987,26988,26989,26992],{"style":25398},"Partial ",[4215,26990,26991],{"style":23447},"Class"," Uc_WaitPanel",[2232,26994,11983,26995,26998],{"style":25409},[4215,26996,26997],{"style":23447},"Inherits"," System.Web.UI.UserControl",[2232,27000,8422],{"style":25398},[2232,27002,11983,27003,11776,27006,27009,27010,27013,27014,11776,27016,3091,27019,27021,27022,27024,27025,11776,27028,27031],{"style":25409},[4215,27004,27005],{"style":23447},"Protected",[4215,27007,27008],{"style":23447},"Sub"," Uc_WaitPanel_Load(",[4215,27011,27012],{"style":23447},"ByVal"," sender ",[4215,27015,23090],{"style":23447},[4215,27017,27018],{"style":23447},"Object",[4215,27020,27012],{"style":23447}," e ",[4215,27023,23090],{"style":23447}," System.EventArgs) ",[4215,27026,27027],{"style":23447},"Handles",[4215,27029,27030],{"style":23447},"Me",".Load",[2232,27033,8422],{"style":25398},[2232,27035,12818,27036,27038,27039,11776,27041,27043],{"style":25409},[4215,27037,23072],{"style":23447}," css ",[4215,27040,23090],{"style":23447},[4215,27042,23093],{"style":23447}," HtmlLink()",[2232,27045,12818,27046,27049],{"style":25398},[4215,27047,27048],{"style":23447},"With"," css",[2232,27051,27052,27053,7815],{"style":25409},"            .Href = ResolveClientUrl(",[4215,27054,27055],{"style":23512},"\"~\u002FStyle\u002FWait.css\"",[2232,27057,27058,27059,27062,27063],{"style":25398},"            .Attributes(",[4215,27060,27061],{"style":23512},"\"rel\"",") = ",[4215,27064,27065],{"style":23512},"\"stylesheet\"",[2232,27067,27058,27068,27062,27071],{"style":25409},[4215,27069,27070],{"style":23512},"\"type\"",[4215,27072,27073],{"style":23512},"\"text\u002Fcss\"",[2232,27075,27058,27076,27062,27079],{"style":25398},[4215,27077,27078],{"style":23512},"\"media\"",[4215,27080,27081],{"style":23512},"\"all\"",[2232,27083,12818,27084,11776,27087],{"style":25409},[4215,27085,27086],{"style":23447},"End",[4215,27088,27048],{"style":23447},[2232,27090,27091],{"style":25398},"        Page.Header.Controls.Add(css)",[2232,27093,8422],{"style":25409},[2232,27095,12818,27096,27098,27099,11776,27101,27104,27105,7815],{"style":25398},[4215,27097,23072],{"style":23447}," url ",[4215,27100,23090],{"style":23447},[4215,27102,27103],{"style":23447},"String"," = ResolveClientUrl(",[4215,27106,27107],{"style":23512},"\"~\u002FScripts\u002FWait.js\"",[2232,27109,27110,27111,27114],{"style":25409},"        Page.ClientScript.RegisterClientScriptInclude(",[4215,27112,27113],{"style":23512},"\"wait\"",", url)",[2232,27116,8422],{"style":25398},[2232,27118,11983,27119,11776,27121],{"style":25409},[4215,27120,27086],{"style":23447},[4215,27122,27008],{"style":23447},[2232,27124,27125,27127],{"style":25398},[4215,27126,27086],{"style":23447}," Class",[9636,27129,10274,27130,10274],{"id":25390},[9636,27131,10274,27132,10274,10274,27137,10274,10274,27140,10274,10274,27142,10274,10274,27150,10274,10274,27153,10274,10274,27159,10274,10274,27165,10274,10274,27173,10274,10274,27180,10274,10274,27187,10274,10274,27192,10274,10274,27198,10274,11776,10274,27200,10274,10274,27203,10274,10274,27205,10274,10274,27213,10274,10274,27221,10274,10274,27228,10274,10274,27233,10274,10274,27239,10274,10274,27242,10274,10274,27248,10274,10274,27255,10274,10274,27261,10274,10274,27269,10274],{"id":25394,"style":25395},[2232,27133,27134],{"style":25398},[4215,27135,27136],{"style":24383},"\u002F* updateprogress css *\u002F",[2232,27138,27139],{"style":25409},"    #OuterTableCellOverlay",[2232,27141,23472],{"style":25398},[2232,27143,12818,27144,3087,27147,13053],{"style":25409},[4215,27145,27146],{"style":23447},"background-color",[4215,27148,27149],{"style":23512},"white;",[2232,27151,27152],{"style":25398},"        filter:alpha(opacity=85);",[2232,27154,27155,27156,12818],{"style":25409},"        -moz-opacity:",[4215,27157,27158],{"style":23512},"0.85;",[2232,27160,27161,27162],{"style":25398},"        z-index: ",[4215,27163,27164],{"style":23512},"999;",[2232,27166,12818,27167,3087,27170],{"style":25409},[4215,27168,27169],{"style":23447},"width",[4215,27171,27172],{"style":23512},"100%;",[2232,27174,12818,27175,3087,27178],{"style":25398},[4215,27176,27177],{"style":23447},"height",[4215,27179,27172],{"style":23512},[2232,27181,12818,27182,3087,27184],{"style":25409},[4215,27183,19280],{"style":23447},[4215,27185,27186],{"style":23512},"absolute;",[2232,27188,12818,27189,27191],{"style":25398},[4215,27190,22152],{"style":23447},": 0;",[2232,27193,12818,27194,27197],{"style":25409},[4215,27195,27196],{"style":23447},"left",": 0;                        ",[2232,27199,23478],{"style":25398},[2232,27201,27202],{"style":25398},"    #InnerTableCellOverlay",[2232,27204,23472],{"style":25409},[2232,27206,12818,27207,3087,27210],{"style":25398},[4215,27208,27209],{"style":23447},"border",[4215,27211,27212],{"style":23512},"1px solid black;",[2232,27214,12818,27215,3087,27218],{"style":25409},[4215,27216,27217],{"style":23447},"padding",[4215,27219,27220],{"style":23512},"10px;",[2232,27222,12818,27223,3087,27225],{"style":25398},[4215,27224,27146],{"style":23447},[4215,27226,27227],{"style":23512},"#eee;",[2232,27229,27161,27230],{"style":25409},[4215,27231,27232],{"style":23512},"998;",[2232,27234,12818,27235,3087,27237],{"style":25398},[4215,27236,27146],{"style":23447},[4215,27238,27227],{"style":23512},[2232,27240,27241],{"style":25409},"        filter:alpha(opacity=100);",[2232,27243,12818,27244,3087,27246],{"style":25398},[4215,27245,19280],{"style":23447},[4215,27247,27186],{"style":23512},[2232,27249,12818,27250,3087,27252],{"style":25409},[4215,27251,22152],{"style":23447},[4215,27253,27254],{"style":23512},"0pt;",[2232,27256,12818,27257,3087,27259,25058],{"style":25398},[4215,27258,27196],{"style":23447},[4215,27260,27254],{"style":23512},[2232,27262,12818,27263,3087,27266,12818],{"style":25409},[4215,27264,27265],{"style":23447},"text-align",[4215,27267,27268],{"style":23512},"center;",[2232,27270,23478],{"style":25398},[9636,27272,8422],{"id":25390},[9636,27274,10274,27275,10274],{"id":25390},[9636,27276,10274,27277,10274,10274,27300,10274,10274,27312,10274],{"id":25394,"style":25395},[2232,27278,27279,27281,11776,27283,27285,11776,27287,27289,11776,27291,27293,11776,27295,27297,11776],{"style":25398},[4215,27280,8666],{"style":23447},[4215,27282,24069],{"style":23947},[4215,27284,24039],{"style":23950},[4215,27286,26781],{"style":23447},[4215,27288,23967],{"style":23950},[4215,27290,23970],{"style":23447},[4215,27292,24081],{"style":23950},[4215,27294,24084],{"style":23447},[4215,27296,4682],{"style":23950},[4215,27298,27299],{"style":23447},"=\"width:100px;\"",[2232,27301,24783,27302,27304,11776,27307,27309,11776],{"style":25409},[4215,27303,24093],{"style":23950},[4215,27305,27306],{"style":23447},"=\"return fncValidateSubmit('Ready to Submit?');\"",[4215,27308,24087],{"style":23950},[4215,27310,27311],{"style":23447},"=\"Save\"",[2232,27313,24783,27314,27317,11776,27319,27322,11776,27325],{"style":25398},[4215,27315,27316],{"style":23950},"ToolTip",[4215,27318,27311],{"style":23447},[4215,27320,27321],{"style":23950},"Visible",[4215,27323,27324],{"style":23447},"=\"false\"",[4215,27326,24060],{"style":23447},[9636,27328,8422],{},[9636,27330,8422],{},[9636,27332,10274,27333,10274],{"id":25390},[9636,27334,10274,27336,10274,10274,27341,10274,10274,27346,10274,10274,27351,10274,10274,27359,10274,10274,27365,10274,10274,27370,10274,10274,27376,10274,10274,27381,10274,11776,10274,27383,10274,10274,27387,10274,10274,27390,10274,10274,27396,10274,10274,27398,10274],{"id":25394,"style":27335},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 239px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,27337,27338],{"style":25398},[4215,27339,27340],{"style":24383},"\u002F\u002Fvalidate before submitting signature authority            ",[2232,27342,11983,27343,27345],{"style":25409},[4215,27344,22523],{"style":23447}," fncValidateSubmit(msg) {",[2232,27347,12818,27348],{"style":25398},[4215,27349,27350],{"style":24383},"\u002F\u002Fperform some client side validation checks here...",[2232,27352,12818,27353,27355,27356,27358],{"style":25409},[4215,27354,15223],{"style":23447}," (valid == ",[4215,27357,15236],{"style":23447},") {",[2232,27360,25058,27361,27364],{"style":25398},[4215,27362,27363],{"style":23447},"var"," answer = confirm(msg);                    ",[2232,27366,25058,27367,27369],{"style":25409},[4215,27368,15223],{"style":23447}," (answer) {",[2232,27371,27372,27373,24433],{"style":25398},"                ShowWait(",[4215,27374,27375],{"style":23512},"'UpdateProgress1'",[2232,27377,26159,27378,27380],{"style":25409},[4215,27379,15052],{"style":23447}," answer;",[2232,27382,25939],{"style":25398},[2232,27384,26177,27385,12465],{"style":25398},[4215,27386,24870],{"style":23447},[2232,27388,27389],{"style":25409},"            alert(errmsg);",[2232,27391,25058,27392,11776,27394,15454],{"style":25398},[4215,27393,15052],{"style":23447},[4215,27395,9854],{"style":23447},[2232,27397,23797],{"style":25409},[2232,27399,23478],{"style":25398},[9636,27401,10274,27402,10274],{"id":25390},[9636,27403,10274,27405,10274,10274,27410,10274,10274,27413,10274,10274,27419,10274],{"id":25394,"style":27404},"text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 64px; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;",[2232,27406,27407,27409],{"style":25398},[4215,27408,22523],{"style":23447}," ShowWait(progressControlId) {",[2232,27411,27412],{"style":25409},"    SetWaitDimensions();",[2232,27414,27415,27416,15454],{"style":25398},"    document.getElementById(progressControlId).style.display = ",[4215,27417,27418],{"style":23512},"'block'",[2232,27420,23497],{"style":25409},[19,27422,27423],{},"This was an problem.",[9636,27425,10274,27427,10274],{"id":25390,"style":27426},"text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; height: 204px; max-height: 500px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;",[9636,27428,10274,27429,10274,10274,27443,10274,10274,27446,10274,10274,27449,10274,10274,27452,10274,10274,27455,10274,10274,27458,10274,10274,27461,10274,10274,27464,10274,10274,27467,10274,10274,27470,10274,10274,27473,10274],{"id":25394,"style":25395},[2232,27430,27431,27432,27434,11776,27436,27438,27441],{"style":25398},"\u002F\u002F\u002F\u002Fcall the following from ",[4215,27433,8666],{"style":23447},[4215,27435,9586],{"style":23947},[4215,27437,26664],{"style":23950},[4215,27439,27440],{"style":23447},"=\"load()\"",[4215,27442,8850],{"style":23447},[2232,27444,27445],{"style":25409},"\u002F\u002F\u002F\u002Frequired so that background blur is dimensioned correctly (with respect to scroll issues with browser)",[2232,27447,27448],{"style":25398},"\u002F\u002F\u002F\u002Fenable js to be called after ajax postback",[2232,27450,27451],{"style":25409},"function loadAjaxHandlers() {",[2232,27453,27454],{"style":25398},"    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);",[2232,27456,27457],{"style":25409},"    \u002F\u002Fwill process during the initialization of the postback",[2232,27459,27460],{"style":25398},"    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(",[2232,27462,27463],{"style":25409},"                    function() {",[2232,27465,27466],{"style":25398},"                        SetWaitDimensions();",[2232,27468,27469],{"style":25409},"                    }",[2232,27471,27472],{"style":25398},"               )",[2232,27474,23497],{"style":25409},[16,27476,27477],{},"The following is my complete Wait.js file which you can see sizes the overlay and positions the wait message.",[9636,27479,10274,27480,10274],{"id":25390,"style":25820},[9636,27481,10274,27482,10274,10274,27487,10274,10274,27491,10274,10274,27495,10274,10274,27500,10274,10274,27502,10274,10274,27507,10274,10274,27509,10274,10274,27514,10274,10274,27516,10274,10274,27518,10274,10274,27520,10274,10274,27522,10274,10274,27524,10274,10274,27528,10274,10274,27530,10274,10274,27534,10274,10274,27536,10274,10274,27538,10274,10274,27543,10274,10274,27548,10274,10274,27553,10274,10274,27561,10274,10274,27569,10274,10274,27571,10274,10274,27577,10274,10274,27583,10274,10274,27585,10274,10274,27590,10274,10274,27595,10274,10274,27600,10274,10274,27602,10274,10274,27607,10274,10274,27613,10274,10274,27617,10274,10274,27622,10274,10274,27628,10274,10274,27630,10274,10274,27635,10274,10274,27640,10274,10274,27642,10274,10274,27652,10274,10274,27661,10274,10274,27663,10274,10274,27665,10274,10274,27667,10274,10274,27672,10274,10274,27677,10274,10274,27682,10274,10274,27687,10274,10274,27690,10274,10274,27693,10274,10274,27700,10274,10274,27703,10274,10274,27706,10274,10274,27710,10274,10274,27713,10274,10274,27716,10274,10274,27718,10274,10274,27723,10274,10274,27725,10274,10274,27727,10274,10274,27732,10274,10274,27737,10274,10274,27742,10274,10274,27745,10274,10274,27748,10274,10274,27753,10274,10274,27755,10274,10274,27757,10274,10274,27762,10274,10274,27767,10274,10274,27772,10274,10274,27775,10274,10274,27778,10274,10274,27783,10274],{"id":25394,"style":25395},[2232,27483,27484],{"style":25398},[4215,27485,27486],{"style":24383},"\u002F\u002F\u002F\u002Fcall the following from \u003Cbody onload=\"load()\">",[2232,27488,27489],{"style":25409},[4215,27490,27445],{"style":24383},[2232,27492,27493],{"style":25398},[4215,27494,27448],{"style":24383},[2232,27496,27497,27499],{"style":25409},[4215,27498,22523],{"style":23447}," loadAjaxHandlers() {",[2232,27501,27454],{"style":25398},[2232,27503,11983,27504],{"style":25409},[4215,27505,27506],{"style":24383},"\u002F\u002Fwill process during the initialization of the postback",[2232,27508,27460],{"style":25398},[2232,27510,26800,27511,27513],{"style":25409},[4215,27512,22523],{"style":23447},"() {",[2232,27515,27466],{"style":25398},[2232,27517,27469],{"style":25409},[2232,27519,27472],{"style":25398},[2232,27521,23497],{"style":25409},[2232,27523,8422],{"style":25398},[2232,27525,27526,27409],{"style":25409},[4215,27527,22523],{"style":23447},[2232,27529,27412],{"style":25398},[2232,27531,27415,27532,15454],{"style":25409},[4215,27533,27418],{"style":23512},[2232,27535,23497],{"style":25398},[2232,27537,8422],{"style":25409},[2232,27539,27540],{"style":25398},[4215,27541,27542],{"style":24383},"\u002F\u002Fset dimensions of blur element, positions progress box",[2232,27544,27545,27547],{"style":25409},[4215,27546,22523],{"style":23447}," SetWaitDimensions() {",[2232,27549,11983,27550,27552],{"style":25398},[4215,27551,15223],{"style":23447}," (document.getElementById) {",[2232,27554,12818,27555,27557,27558,24433],{"style":25409},[4215,27556,27363],{"style":23447}," blur = document.getElementById(",[4215,27559,27560],{"style":23512},"'OuterTableCellOverlay'",[2232,27562,12818,27563,27565,27566,24433],{"style":25398},[4215,27564,27363],{"style":23447}," progress = document.getElementById(",[4215,27567,27568],{"style":23512},"'InnerTableCellOverlay'",[2232,27570,8422],{"style":25409},[2232,27572,27573,27574,15454],{"style":25398},"        progress.style.width = ",[4215,27575,27576],{"style":23512},"'444px'",[2232,27578,27579,27580,15454],{"style":25409},"        progress.style.height = ",[4215,27581,27582],{"style":23512},"'100px'",[2232,27584,8422],{"style":25398},[2232,27586,12818,27587,27589],{"style":25409},[4215,27588,27363],{"style":23447}," vp = getViewport();",[2232,27591,12818,27592,27594],{"style":25398},[4215,27593,27363],{"style":23447}," dm = getElementDimensions(document.body);",[2232,27596,12818,27597,27599],{"style":25409},[4215,27598,27363],{"style":23447}," sp = getScrollPosition();",[2232,27601,8422],{"style":25398},[2232,27603,12818,27604,27606],{"style":25409},[4215,27605,15223],{"style":23447}," (vp.height > dm.height)",[2232,27608,27609,27610,15454],{"style":25398},"            blur.style.height = vp.height + ",[4215,27611,27612],{"style":23512},"'px'",[2232,27614,12818,27615],{"style":25409},[4215,27616,24870],{"style":23447},[2232,27618,27619,27620,15454],{"style":25398},"            blur.style.height = dm.height + ",[4215,27621,27612],{"style":23512},[2232,27623,27624,27625,15454],{"style":25409},"        blur.style.width = ",[4215,27626,27627],{"style":23512},"'100%'",[2232,27629,8422],{"style":25398},[2232,27631,27632,27633,15454],{"style":25409},"        blur.style.top = (sp.y + ((vp.height - dm.height) \u002F 3)) + ",[4215,27634,27612],{"style":23512},[2232,27636,27637,27638,15454],{"style":25398},"        blur.style.left = (sp.x + ((vp.width - dm.width) \u002F 2)) + ",[4215,27639,27612],{"style":23512},[2232,27641,8422],{"style":25409},[2232,27643,27644,27645,3091,27647,27649,27650,15454],{"style":25398},"        progress.style.top = document.documentElement.clientHeight \u002F 3 - progress.style.height.replace(",[4215,27646,27612],{"style":23512},[4215,27648,22687],{"style":23512},") \u002F 2 + ",[4215,27651,27612],{"style":23512},[2232,27653,27654,27655,3091,27657,27649,27659,15454],{"style":25409},"        progress.style.left = document.body.offsetWidth \u002F 2 - progress.style.width.replace(",[4215,27656,27612],{"style":23512},[4215,27658,22687],{"style":23512},[4215,27660,27612],{"style":23512},[2232,27662,8422],{"style":25398},[2232,27664,23478],{"style":25409},[2232,27666,23497],{"style":25398},[2232,27668,27669],{"style":25409},[4215,27670,27671],{"style":24383},"\u002F\u002Freturns view port dimensions",[2232,27673,27674,27676],{"style":25398},[4215,27675,22523],{"style":23447}," getViewport() {",[2232,27678,11983,27679,27681],{"style":25409},[4215,27680,27363],{"style":23447}," v = { width: 0, height: 0 };",[2232,27683,11983,27684,27686],{"style":25398},[4215,27685,15223],{"style":23447}," (window.innerHeight) {",[2232,27688,27689],{"style":25409},"        v.height = window.innerHeight;",[2232,27691,27692],{"style":25398},"        v.width = window.innerWidth;",[2232,27694,25540,27695,11776,27697,27699],{"style":25409},[4215,27696,24870],{"style":23447},[4215,27698,15223],{"style":23447}," (document.documentElement.clientHeight) {",[2232,27701,27702],{"style":25398},"        v.height = document.documentElement.clientHeight;",[2232,27704,27705],{"style":25409},"        v.width = document.documentElement.clientWidth;",[2232,27707,25540,27708,12465],{"style":25398},[4215,27709,24870],{"style":23447},[2232,27711,27712],{"style":25409},"        v.height = document.body.clientHeight;",[2232,27714,27715],{"style":25398},"        v.width = document.body.clientWidth;",[2232,27717,23478],{"style":25409},[2232,27719,11983,27720,27722],{"style":25398},[4215,27721,15052],{"style":23447}," v;",[2232,27724,23497],{"style":25409},[2232,27726,8422],{"style":25398},[2232,27728,27729],{"style":25409},[4215,27730,27731],{"style":24383},"\u002F\u002Freturns dimensions of element",[2232,27733,27734,27736],{"style":25398},[4215,27735,22523],{"style":23447}," getElementDimensions(el) {",[2232,27738,11983,27739,27741],{"style":25409},[4215,27740,27363],{"style":23447}," dim = { width: 0, height: 0 };",[2232,27743,27744],{"style":25398},"    dim.width = el.offsetWidth;",[2232,27746,27747],{"style":25409},"    dim.height = el.offsetHeight;",[2232,27749,11983,27750,27752],{"style":25398},[4215,27751,15052],{"style":23447}," dim;",[2232,27754,23497],{"style":25409},[2232,27756,8422],{"style":25398},[2232,27758,27759],{"style":25409},[4215,27760,27761],{"style":24383},"\u002F\u002Freturns window scroll position",[2232,27763,27764,27766],{"style":25398},[4215,27765,22523],{"style":23447}," getScrollPosition() {",[2232,27768,11983,27769,27771],{"style":25409},[4215,27770,27363],{"style":23447}," pos = { x: 0, y: 0 };",[2232,27773,27774],{"style":25398},"    pos.x = window.pageXOffset ? window.pageXOffset : document.documentElement.scrollLeft;",[2232,27776,27777],{"style":25409},"    pos.y = window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop;",[2232,27779,11983,27780,27782],{"style":25398},[4215,27781,15052],{"style":23447}," pos;",[2232,27784,23497],{"style":25409},[156,27786],{"style":15880,"src":27787,"alt":1080},"\u002Farticles\u002Fimages\u002Fpanel.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":27789},[],"2015-04-20T08:07:16.0300000-04:00",{},"\u002Farticles\u002Fasp-net-updatepanel-updateprogress-controls-and-overlays-wait-messages",{"title":26619,"description":1915},"articles\u002Fasp-net-updatepanel-updateprogress-controls-and-overlays-wait-messages",[8994],"0Cy_xmk1pTHqsntDFTdovnbYtmnSiOumdscBNMxpfJ4",{"id":27798,"title":27799,"author":8,"body":27800,"createdAt":28476,"description":1915,"extension":1101,"img":28473,"meta":28477,"navigation":1104,"path":28478,"seo":28479,"stem":28480,"tags":28481,"updatedAt":28476,"__hash__":28482},"articles\u002Farticles\u002Fgenericcollection-usage-in-the-net-framework.md","Generic(Collection) Usage in the .NET Framework",{"type":10,"value":27801,"toc":28474},[27802,27808,27811,27898,27979,28112,28115,28255,28322,28325,28328,28341,28344,28441,28449,28457,28460,28463,28466],[16,27803,27804,27805,27807],{},"Generics provide a way for developers to define subroutines, functions, fields, properties as well as classes, structures, interfaces and even delegates in such a way that the parameters are not of any particular type.  In a sense the constructs are defined in a generic approach.",[1118,27806],{},"\nThe .NET Framework contains the following namespaces:System.Collections, System.Collections.Generic.    The latter mimics very much the features of the former. ",[16,27809,27810],{},"System.Collections namespace (nongeneric)",[2014,27812,10274,27814,10274],{"border":8404,"cellSpacing":13084,"cellPadding":13084,"style":27813},"width: 515px;",[2037,27815,10274,27816,10274,27828,10274,27838,10274,27849,10274,27860,10274,27870,10274,27880,10274,27890,10274],{},[2020,27817,10274,27818,10274,27821,10274,27824,10274],{},[2042,27819,27820],{"width":19403,"vAlign":22152},"ICollection",[2042,27822,27823],{"width":21821,"vAlign":22152},"(size, enumeration, thread safety)",[2042,27825,27827],{"width":27826,"vAlign":22152},137,"derives from IEnumerable",[2020,27829,10274,27830,10274,27833,10274,27836,10274],{},[2042,27831,27832],{"width":19403,"vAlign":22152},"IComparer",[2042,27834,27835],{"width":21821,"vAlign":22152},"Allows two objects to be compared",[2042,27837,8422],{"width":27826,"vAlign":22152},[2020,27839,10274,27840,10274,27843,10274,27846,10274],{},[2042,27841,27842],{"width":19403,"vAlign":22152},"IDictionary",[2042,27844,27845],{"width":21821,"vAlign":22152},"Collection object to represent its contents using name\u002Fvalue pairs",[2042,27847,27848],{"width":27826,"vAlign":22152},"derives from ICollection, IEnumerable",[2020,27850,10274,27851,10274,27854,10274,27857,10274],{},[2042,27852,27853],{"width":19403,"vAlign":22152},"IDictionaryEnumerator",[2042,27855,27856],{"width":21821,"vAlign":22152},"Enumerates the contents of a type supporting IDictionary",[2042,27858,27859],{"width":27826,"vAlign":22152},"derives from IEnumerator",[2020,27861,10274,27862,10274,27865,10274,27868,10274],{},[2042,27863,27864],{"width":19403,"vAlign":22152},"IEnumerable",[2042,27866,27867],{"width":21821,"vAlign":22152},"Returns IEnumerator interface for a collection",[2042,27869,8422],{"width":27826,"vAlign":22152},[2020,27871,10274,27872,10274,27875,10274,27878,10274],{},[2042,27873,27874],{"width":19403,"vAlign":22152},"IEnumerator",[2042,27876,27877],{"width":21821,"vAlign":22152},"Enables for each style iteration of items in collection",[2042,27879,8422],{"width":27826,"vAlign":22152},[2020,27881,10274,27882,10274,27885,10274,27888,10274],{},[2042,27883,27884],{"width":19403,"vAlign":22152},"IList",[2042,27886,27887],{"width":21821,"vAlign":22152},"Provides add, remove and index items in a list of objects",[2042,27889,27848],{"width":27826,"vAlign":22152},[2020,27891,10274,27892,10274,27894,10274,27896,10274],{},[2042,27893,8422],{"width":19403,"vAlign":22152},[2042,27895,8422],{"width":21821,"vAlign":22152},[2042,27897,8422],{"width":27826,"vAlign":22152},[9636,27899,10274,27900,10274],{"id":25390},[9636,27901,10274,27903,10274,10274,27913,10274,10274,27919,10274,10274,27938,10274,10274,27951,10274,10274,27963,10274,10274,27974,10274],{"id":25394,"style":27902},"padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;",[2232,27904,27906,11776,27909,27912],{"style":27905},"margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;",[4215,27907,27908],{"style":23447},"Public",[4215,27910,27911],{"style":23447},"Interface"," ICollection",[2232,27914,13053,27916,27918],{"style":27915},"margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;",[4215,27917,26997],{"style":23447}," IEnumerable",[2232,27920,13053,27921,27923,27924,27926,27927,27929,27930,27932,27933,11776,27935,7815],{"style":27905},[4215,27922,27008],{"style":23447}," CopyTo(",[4215,27925,27012],{"style":23447}," array ",[4215,27928,23090],{"style":23447}," Array, ",[4215,27931,27012],{"style":23447}," index ",[4215,27934,23090],{"style":23447},[4215,27936,27937],{"style":23447},"Integer",[2232,27939,13053,27940,11776,27943,27946,27947,11776,27949],{"style":27915},[4215,27941,27942],{"style":23447},"ReadOnly",[4215,27944,27945],{"style":23447},"Property"," Count() ",[4215,27948,23090],{"style":23447},[4215,27950,27937],{"style":23447},[2232,27952,13053,27953,11776,27955,27957,27958,11776,27960],{"style":27905},[4215,27954,27942],{"style":23447},[4215,27956,27945],{"style":23447}," IsSynchronized() ",[4215,27959,23090],{"style":23447},[4215,27961,27962],{"style":23447},"Boolean",[2232,27964,13053,27965,11776,27967,27969,27970,11776,27972],{"style":27915},[4215,27966,27942],{"style":23447},[4215,27968,27945],{"style":23447}," SyncRoot() ",[4215,27971,23090],{"style":23447},[4215,27973,27018],{"style":23447},[2232,27975,27976,27978],{"style":27905},[4215,27977,27086],{"style":23447}," Interface",[9636,27980,10274,27981,10274],{"id":25390},[9636,27982,10274,27983,10274,10274,27990,10274,10274,27995,10274,10274,28013,10274,10274,28018,10274,10274,28034,10274,10274,28042,10274,10274,28053,10274,10274,28064,10274,10274,28075,10274,10274,28090,10274,10274,28099,10274,10274,28108,10274],{"id":25394,"style":27902},[2232,27984,27985,11776,27987,27989],{"style":27905},[4215,27986,27908],{"style":23447},[4215,27988,27911],{"style":23447}," IDictionary",[2232,27991,13053,27992,27994],{"style":27915},[4215,27993,26997],{"style":23447}," ICollection, IEnumerable",[2232,27996,13053,27997,27999,28000,28002,28003,11776,28005,3091,28007,22812,28009,11776,28011,7815],{"style":27905},[4215,27998,27008],{"style":23447}," Add(",[4215,28001,27012],{"style":23447}," key ",[4215,28004,23090],{"style":23447},[4215,28006,27018],{"style":23447},[4215,28008,27012],{"style":23447},[4215,28010,23090],{"style":23447},[4215,28012,27018],{"style":23447},[2232,28014,13053,28015,28017],{"style":27915},[4215,28016,27008],{"style":23447}," Clear()",[2232,28019,13053,28020,28023,28024,28002,28026,11776,28028,26443,28030,11776,28032],{"style":27905},[4215,28021,28022],{"style":23447},"Function"," Contains(",[4215,28025,27012],{"style":23447},[4215,28027,23090],{"style":23447},[4215,28029,27018],{"style":23447},[4215,28031,23090],{"style":23447},[4215,28033,27962],{"style":23447},[2232,28035,13053,28036,28038,28039,28041],{"style":27915},[4215,28037,28022],{"style":23447}," GetEnumerator() ",[4215,28040,23090],{"style":23447}," IDictionaryEnumerator",[2232,28043,13053,28044,28046,28047,28002,28049,11776,28051,7815],{"style":27905},[4215,28045,27008],{"style":23447}," Remove(",[4215,28048,27012],{"style":23447},[4215,28050,23090],{"style":23447},[4215,28052,27018],{"style":23447},[2232,28054,13053,28055,11776,28057,28059,28060,11776,28062],{"style":27915},[4215,28056,27942],{"style":23447},[4215,28058,27945],{"style":23447}," IsFixedSize() ",[4215,28061,23090],{"style":23447},[4215,28063,27962],{"style":23447},[2232,28065,13053,28066,11776,28068,28070,28071,11776,28073],{"style":27905},[4215,28067,27942],{"style":23447},[4215,28069,27945],{"style":23447}," IsReadOnly() ",[4215,28072,23090],{"style":23447},[4215,28074,27962],{"style":23447},[2232,28076,13053,28077,28079,28080,28002,28082,11776,28084,26443,28086,11776,28088],{"style":27915},[4215,28078,27945],{"style":23447}," Item(",[4215,28081,27012],{"style":23447},[4215,28083,23090],{"style":23447},[4215,28085,27018],{"style":23447},[4215,28087,23090],{"style":23447},[4215,28089,27018],{"style":23447},[2232,28091,13053,28092,11776,28094,28096,28097,27912],{"style":27905},[4215,28093,27942],{"style":23447},[4215,28095,27945],{"style":23447}," Keys() ",[4215,28098,23090],{"style":23447},[2232,28100,13053,28101,11776,28103,28105,28106,27912],{"style":27915},[4215,28102,27942],{"style":23447},[4215,28104,27945],{"style":23447}," Values() ",[4215,28107,23090],{"style":23447},[2232,28109,28110,27978],{"style":27905},[4215,28111,27086],{"style":23447},[16,28113,28114],{},"IList provides the ability to insert, remove and index items",[9636,28116,10274,28117,10274],{"id":25390},[9636,28118,10274,28119,10274,10274,28126,10274,10274,28130,10274,10274,28144,10274,10274,28148,10274,10274,28162,10274,10274,28177,10274,10274,28194,10274,10274,28204,10274,10274,28215,10274,10274,28225,10274,10274,28235,10274,10274,28249,10274],{"id":25394,"style":27902},[2232,28120,28121,11776,28123,28125],{"style":27905},[4215,28122,27908],{"style":23447},[4215,28124,27911],{"style":23447}," IList",[2232,28127,13053,28128,27994],{"style":27915},[4215,28129,26997],{"style":23447},[2232,28131,13053,28132,27999,28134,22812,28136,11776,28138,26443,28140,11776,28142],{"style":27905},[4215,28133,28022],{"style":23447},[4215,28135,27012],{"style":23447},[4215,28137,23090],{"style":23447},[4215,28139,27018],{"style":23447},[4215,28141,23090],{"style":23447},[4215,28143,27937],{"style":23447},[2232,28145,13053,28146,28017],{"style":27915},[4215,28147,27008],{"style":23447},[2232,28149,13053,28150,28023,28152,22812,28154,11776,28156,26443,28158,11776,28160],{"style":27905},[4215,28151,28022],{"style":23447},[4215,28153,27012],{"style":23447},[4215,28155,23090],{"style":23447},[4215,28157,27018],{"style":23447},[4215,28159,23090],{"style":23447},[4215,28161,27962],{"style":23447},[2232,28163,13053,28164,28166,28167,22812,28169,11776,28171,26443,28173,11776,28175],{"style":27915},[4215,28165,28022],{"style":23447}," IndexOf(",[4215,28168,27012],{"style":23447},[4215,28170,23090],{"style":23447},[4215,28172,27018],{"style":23447},[4215,28174,23090],{"style":23447},[4215,28176,27937],{"style":23447},[2232,28178,13053,28179,28181,28182,27932,28184,11776,28186,3091,28188,22812,28190,11776,28192,7815],{"style":27905},[4215,28180,27008],{"style":23447}," Insert(",[4215,28183,27012],{"style":23447},[4215,28185,23090],{"style":23447},[4215,28187,27937],{"style":23447},[4215,28189,27012],{"style":23447},[4215,28191,23090],{"style":23447},[4215,28193,27018],{"style":23447},[2232,28195,13053,28196,28046,28198,22812,28200,11776,28202,7815],{"style":27915},[4215,28197,27008],{"style":23447},[4215,28199,27012],{"style":23447},[4215,28201,23090],{"style":23447},[4215,28203,27018],{"style":23447},[2232,28205,13053,28206,28208,28209,27932,28211,11776,28213,7815],{"style":27905},[4215,28207,27008],{"style":23447}," RemoveAt(",[4215,28210,27012],{"style":23447},[4215,28212,23090],{"style":23447},[4215,28214,27937],{"style":23447},[2232,28216,13053,28217,11776,28219,28059,28221,11776,28223],{"style":27915},[4215,28218,27942],{"style":23447},[4215,28220,27945],{"style":23447},[4215,28222,23090],{"style":23447},[4215,28224,27962],{"style":23447},[2232,28226,13053,28227,11776,28229,28070,28231,11776,28233],{"style":27905},[4215,28228,27942],{"style":23447},[4215,28230,27945],{"style":23447},[4215,28232,23090],{"style":23447},[4215,28234,27962],{"style":23447},[2232,28236,13053,28237,28079,28239,27932,28241,11776,28243,26443,28245,11776,28247],{"style":27915},[4215,28238,27945],{"style":23447},[4215,28240,27012],{"style":23447},[4215,28242,23090],{"style":23447},[4215,28244,27937],{"style":23447},[4215,28246,23090],{"style":23447},[4215,28248,27018],{"style":23447},[2232,28250,28251,11776,28253],{"style":27905},[4215,28252,27086],{"style":23447},[4215,28254,27911],{"style":23447},[2014,28256,10274,28258,10274],{"border":8404,"cellSpacing":13084,"cellPadding":13084,"style":28257},"width: 711px;",[2037,28259,10274,28260,10274,28272,10274,28283,10274,28294,10274,28304,10274,28314,10274],{},[2020,28261,10274,28262,10274,28265,10274,28268,10274],{},[2042,28263,28264],{"width":17406,"vAlign":22152},"ArrayList",[2042,28266,28267],{"width":18699,"vAlign":22152},"dynamically sized \nDim personList as New ArrayList() \npersonList.AddRange(New Person(){New Person(“dave”), New Person(“tom”)}",[2042,28269,28271],{"width":28270,"vAlign":22152},162,"IList \nICollection \nIEnumerable \nICloneable",[2020,28273,10274,28274,10274,28277,10274,28280,10274],{},[2042,28275,28276],{"width":17406,"vAlign":22152},"Hashtable",[2042,28278,28279],{"width":18699,"vAlign":22152},"collection whereby each item is represented by a numerical key",[2042,28281,28282],{"width":28270,"vAlign":22152},"IDictionary \nICollection \nIEnumerable \nICloneable",[2020,28284,10274,28285,10274,28288,10274,28291,10274],{},[2042,28286,28287],{"width":17406,"vAlign":22152},"Queue",[2042,28289,28290],{"width":18699,"vAlign":22152},"first in – first out queue with members Dequeue() (removes object at the top of queue), Enqueue() (adds object to end of queue), Peek() (returns object at the beginning of queue without removing it)",[2042,28292,28293],{"width":28270,"vAlign":22152},"ICollection \nICloneable \nIEnumerable",[2020,28295,10274,28296,10274,28299,10274,28302,10274],{},[2042,28297,28298],{"width":17406,"vAlign":22152},"SortedList",[2042,28300,28301],{"width":18699,"vAlign":22152},"similar to dictionary however items can be accessed by ordinal position",[2042,28303,28282],{"width":28270,"vAlign":22152},[2020,28305,10274,28306,10274,28309,10274,28312,10274],{},[2042,28307,28308],{"width":17406,"vAlign":22152},"Stack",[2042,28310,28311],{"width":18699,"vAlign":22152},"last in – first out queue using push, pop and peek",[2042,28313,28293],{"width":28270,"vAlign":22152},[2020,28315,10274,28316,10274,28318,10274,28320,10274],{},[2042,28317,8422],{"width":17406,"vAlign":22152},[2042,28319,8422],{"width":18699,"vAlign":22152},[2042,28321,8422],{"width":28270,"vAlign":22152},[19,28323,28324],{},"System.Collections.Generic",[16,28326,28327],{},"Boxing\u002FUnboxing is a term that is used when a value type variable is stored in a reference type structure.  This occurs with all nongeneric types as they operate of the System.Objects type.",[16,28329,28330,28331,28333,28334,28336,28337,28340],{},"For example:\nDim ar as New ArrayList()\nar.Add(123) ‘boxing occurs\nDim i as Integer = CType(ar(0), Integer) ‘unboxing occurs",[1118,28332],{},"\n\u003Cp$1$2$3$4$5$6> ",[1118,28335],{},"\nUsing a generic collection:\n",[19,28338,28339],{},"Dim ar as New List(Of Integer)","\nar.Add(10) ‘no boxing\nDim i as Integer = ar(0) ‘no unboxing",[16,28342,28343],{},"The following is a list of interfaces within the System.Collections.Generic namespace: ICollections(Of T), IComparer(Of T), IDictionary(Of K, V), IEnumerable(Of T), IEnumerator(Of T), and IList(Of T).  There respective classes are as follows:",[2014,28345,10274,28347,10274],{"border":8404,"cellSpacing":13084,"cellPadding":13084,"style":28346},"width: 657px;",[2037,28348,10274,28349,10274,28361,10274,28371,10274,28381,10274,28391,10274,28401,10274,28411,10274,28421,10274,28431,10274],{},[2020,28350,10274,28351,10274,28355,10274,28359,10274],{},[2042,28352,28354],{"width":28353,"vAlign":22152},198,"Collection(Of T)",[2042,28356,28358],{"width":28357,"vAlign":22152},274,"generic collection",[2042,28360,8422],{"width":18124,"vAlign":22152},[2020,28362,10274,28363,10274,28366,10274,28369,10274],{},[2042,28364,28365],{"width":28353,"vAlign":22152},"Comparer(Of T)",[2042,28367,28368],{"width":28357,"vAlign":22152},"compares two generic objects",[2042,28370,8422],{"width":18124,"vAlign":22152},[2020,28372,10274,28373,10274,28376,10274,28379,10274],{},[2042,28374,28375],{"width":28353,"vAlign":22152},"Dictionary(Of K, V)",[2042,28377,28378],{"width":28357,"vAlign":22152},"name\u002Fvalue pairs",[2042,28380,8422],{"width":18124,"vAlign":22152},[2020,28382,10274,28383,10274,28386,10274,28389,10274],{},[2042,28384,28385],{"width":28353,"vAlign":22152},"List(Of T)",[2042,28387,28388],{"width":28357,"vAlign":22152},"dynamically resizable",[2042,28390,8422],{"width":18124,"vAlign":22152},[2020,28392,10274,28393,10274,28396,10274,28399,10274],{},[2042,28394,28395],{"width":28353,"vAlign":22152},"Queue(Of T)",[2042,28397,28398],{"width":28357,"vAlign":22152},"FIFO collection",[2042,28400,8422],{"width":18124,"vAlign":22152},[2020,28402,10274,28403,10274,28406,10274,28409,10274],{},[2042,28404,28405],{"width":28353,"vAlign":22152},"SortedDictionary(Of K, V)",[2042,28407,28408],{"width":28357,"vAlign":22152},"sorted set of name\u002Fvalue pairs",[2042,28410,8422],{"width":18124,"vAlign":22152},[2020,28412,10274,28413,10274,28416,10274,28419,10274],{},[2042,28414,28415],{"width":28353,"vAlign":22152},"Stack(Of T)",[2042,28417,28418],{"width":28357,"vAlign":22152},"LIFO collection",[2042,28420,8422],{"width":18124,"vAlign":22152},[2020,28422,10274,28423,10274,28426,10274,28429,10274],{},[2042,28424,28425],{"width":28353,"vAlign":22152},"LinkedList(Of T)",[2042,28427,28428],{"width":28357,"vAlign":22152},"doubly linked list",[2042,28430,8422],{"width":18124,"vAlign":22152},[2020,28432,10274,28433,10274,28436,10274,28439,10274],{},[2042,28434,28435],{"width":28353,"vAlign":22152},"ReadOnlyCollection(Of T)",[2042,28437,28438],{"width":28357,"vAlign":22152},"readonly set of items",[2042,28440,8422],{"width":18124,"vAlign":22152},[16,28442,28443,28444,28333,28446,28448],{},"Public Function Test(Of T)(ByRef o1 as T, ByRef o2 as T) as T\n  ‘do something\nEnd Function",[1118,28445],{},[1118,28447],{},"\nIt is possible to establish constraints with respect to the type of T.  The following is a complete list of the types of constraints:\nOf T as Structure > the type parameter must be a value type (ie. structure)\nOf T as Class > the type parameter must be a reference type (i.e. classes)\nOf T as New > the type parameter must have a default constructor\nOf T as NameOf BaseClass > the type parameter must be derived from the class specified by NameOfBaseClass\nOf T as NameOfInterface > the type parameter must implement the interface specified by NameOfInterface",[16,28450,28451,28452,28333,28454,28456],{},"’new items must have a default constructor\nPublic Class TestClass(Of T as New)\n  ‘stuff here\nEnd Class",[1118,28453],{},[1118,28455],{},"\nThe term generic can apply to Interfaces as well. In any case the interface will define the contract that the implementing class must adhere to.  When implementing a generic interface the supporting type specifies the placeholder type:",[16,28458,28459],{},"Public Interface IMyInterface(Of T)\n  Function Add(ByVal x as T, ByVal y as T) as T\nEnd Interface",[16,28461,28462],{},"Public Class MyClass\n  Implements IMyInterface(Of Integer)",[16,28464,28465],{},"Public Function Add(ByVal x as Integer, ByVal y as Integer) as Integer\n  Return x + y\nEnd Function",[16,28467,28468,28469,28471],{},"By all means utilize the generic collection namespace over the system.collection nongeneric namespace.  In addition to improved performance(avoiding boxing\u002Funboxing) your code will avoid type-safety issues of earlier releases of .NET.",[1118,28470],{},[156,28472],{"style":15880,"src":28473,"alt":1080},"\u002Farticles\u002Fimages\u002Ffeet.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":28475},[],"2015-04-20T08:07:15.7900000-04:00",{},"\u002Farticles\u002Fgenericcollection-usage-in-the-net-framework",{"title":27799,"description":1915},"articles\u002Fgenericcollection-usage-in-the-net-framework",[10632],"HVNZe5xrJpyaU0pq3szPwlINvtqAJ9ix-JzG7RGvBtg",{"id":28484,"title":28485,"author":8,"body":28486,"createdAt":28549,"description":28490,"extension":1101,"img":28550,"meta":28551,"navigation":1104,"path":28552,"seo":28553,"stem":28554,"tags":28555,"updatedAt":28549,"__hash__":28556},"articles\u002Farticles\u002Fnullable-types-in-net-framework.md","Nullable Types in .NET Framework",{"type":10,"value":28487,"toc":28547},[28488,28491,28494,28509,28515],[16,28489,28490],{},"Within the .NET Framework data types such as Boolean can either be true or false. Right? Well, with the release of 2.0 Framework it has been possible to create nullable data types. A nullable type can represent all the values of the underlying type plus empty (or undefined). In the case of our Boolean it would be True\u002FFalse and Nothing.",[16,28492,28493],{},"It is only possible to create a nullable types Nullable(Of T) for value types since the default value for reference types is already nothing. The following types are valid as nullable: Boolean, Byte, Int16, Int32, Int64, Single, Double, Decimal, DateTime. The following examples show examples on how to create a nullable variable type:",[16,28495,28496,28497,28499,28500,28502,28503,28505,28506,28508],{},"Dim success as New Nullable(Of Boolean)()",[1118,28498],{},"\nDim customerId as New Nullable(Of Integer)()",[1118,28501],{},"\nWith the release of .NET 3.5 it is also possible to use the short form versions:",[1118,28504],{},"\nDim success as Boolean?\nDim customerId as Integer?",[1118,28507],{},"\nIn C#",[16,28510,28511,28512,28514],{},"bool? success;",[1118,28513],{},"\nint? customerId;",[16,28516,28517,28518,28520,28521,28523,28524,28526,28527,28529,28530,28532,28533,28535,28536,28539,28540,28542,28543,15454,28545,12032],{},"To check of a nullable type as a value it is possible to use the HasValue or Value properties. Use the System.Nullable.GetValueOrDefault property return either the assigned value, or the default value for the underlying type.",[1118,28519],{},"\nIf customerId.HasValue Then\ndo something\nEnd If",[1118,28522],{},"\nIf assigning a nullable type to a non-nullable type you must cast operator is necessary. For example:",[1118,28525],{},"\nint newCustomerId = (int)customerId; \u002F\u002F in C#",[1118,28528],{},"\nNullable types can be useful when dealing with NULL values from a database query however they are not the same. That is to say that DBNULL value is not the same as Nothing. When returning data from the database the following code will be necessary:",[1118,28531],{},"\nint? customerId = null;",[1118,28534],{},"\nif (!DBNULL.Value.Equals(reader",[4215,28537,28538],{},"“CustomerId”",")){ \u002F\u002F this code converts the DBNULL to a c# null",[1118,28541],{},"\ncustomerId = (int)reader",[4215,28544,28538],{},[1118,28546],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":28548},[],"2015-04-20T08:07:15.7000000-04:00","\u002Farticles\u002Fimages\u002Fstation.jpg",{},"\u002Farticles\u002Fnullable-types-in-net-framework",{"title":28485,"description":28490},"articles\u002Fnullable-types-in-net-framework",[10632],"JNUKjLzLY5rs-w8jF4EkEer1CjSLRZAYa-LqJjqkYlU",{"id":28558,"title":28559,"author":8,"body":28560,"createdAt":28710,"description":1915,"extension":1101,"img":28707,"meta":28711,"navigation":1104,"path":28712,"seo":28713,"stem":28714,"tags":28715,"updatedAt":28710,"__hash__":28716},"articles\u002Farticles\u002Fstrong-names-and-signing-assemblies-net.md","Strong Names and Signing Assemblies .NET",{"type":10,"value":28561,"toc":28708},[28562,28565,28571,28580,28664,28671,28674,28688,28691,28694,28705],[16,28563,28564],{},"Digital signatures are used to verify the integrity of data being passed from the originator (the signer) to a recipient (the verifier). The signatures are generated and verified using public key cryptography.",[16,28566,1959,28567,28570],{},[19,28568,28569],{},"signer"," of a message has a pair of cryptographic keys: a public key, which everyone in the world knows, and a private key, which is kept secret by the signer.",[16,28572,1959,28573,28576,28577,28579],{},[19,28574,28575],{},"verifier"," knows only the public key, which is used to verify that the signer knew the private key and the message.",[1118,28578],{},"\nStrong Named Assemblies",[48,28581,28582,28585,28588,28591,28594,28597,28600,28603,28606,28609,28612,28625,28628,28631,28634,28646,28649,28652,28655,28658,28661],{},[51,28583,28584],{},"Strong names offer a powerful mechanism for giving .NET Framework assemblies unique identities.",[51,28586,28587],{},"The strong name for an assembly consists of five parts:",[51,28589,28590],{},"a public key (RSA cryptographic public key that helps verify the assembly's authenticity)",[51,28592,28593],{},"a simple name (text string—usually the name of the file (without the extension) that contains the assembly)",[51,28595,28596],{},"a version (four-part version number, in the form of Major.Minor.Build.Revision (i.e.  1.0.0.1)",[51,28598,28599],{},"an optional culture (Target audience for the assembly, such as \"neutral\" (default audience), \"en-us\" (English – United States) or \"fr\" (France) etc.)",[51,28601,28602],{},"and an optional processor architecture (Defines the assembly's format, such as MSIL (intermediate language) or x86 (binary for Intel x86 processors)",[51,28604,28605],{},"An assembly is strong-named during the build process using the private key which corresponds to the public key in the strong name.  The strong name can be verified using the public key.",[51,28607,28608],{},"The .NET Framework verifies the strong name signature.  If it cannot be verified the Framework will not load the assembly.",[51,28610,28611],{},"The above has one exception.  Strong named assemblies that are used in the GAC (Global Assembly Cache) are not verified each time the .NET Framework loads them.  The assemblies in the GAC are verified only at the time they are installed in the GAC as the GAC already is locked down and assemblies can only be installed by an individual who has admin permissions.  Once an assembly was installed in the GAC, it's considered to be safe and being verified earlier (during gacutil.exe phase)",[51,28613,28614,28615,28619,28620,28624],{},"Why use strong names…Strong names prevent others from spoofing your code.  i.e. a malicious user cannot modify your code and successfully re-sign it.  ",[1139,28616,28618],{"href":28617},"http:\u002F\u002Fwww.codeproject.com\u002Fdotnet\u002FStrongNameExplained.asp","Strong names"," are required to store shared assemblies in the global assembly cache (GAC). This is because the GAC allows multiple versions of the same assembly to reside on your system simultaneously, so that each application can find and use its own version of your assembly. This helps avoid ",[1139,28621,28623],{"href":28622},"http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDLL_hell","DLL Hell",", where applications that may be compiled to different versions of your assembly could potentially break because they are all forced to use the same version of your assembly.",[51,28626,28627],{},"Strong name signatures do not contain any reliable information about the publisher.  In order to trust keys from other organizations ensure you have a secure channel to get their public key.  Remember that through the public key the strong named assembly can be verified that it was signed with the corresponding private key.  Hence strong names are secure only when the strong name private key is kept secure.",[51,28629,28630],{},"Strong-name signing is a good idea for most applications, especially those that are deployed over a network or any medium not fully controlled by the deployer.",[51,28632,28633],{},"All assemblies referenced by a strong-named assembly must also be strong-named. If you reference an assembly written by a third party that is not strong-name signed, you cannot strong-name sign your assembly.",[51,28635,28636,28637,28639,28640,28642,28643,28645],{},"Strong-name signing makes servicing more complicated. Under current versioning policy, an assembly will always attempt to load the exact version of the assembly it was built against. If, for example, your application was built against version 1.0.0.0 of a strong-named assembly and you fix a bug in the assembly, bumping the version number to 1.0.0.1, the existing application will not find the updated assembly.",[1118,28638],{},"\nThere are a few ways to deal with this situation. You can rebuild the application against the new assembly. Obviously, this is an annoying process for just picking up a bug fix and it may not be an option in some situations. Still, it works fine when your code is not widely deployed or the assembly being serviced is not widely shared across applications.",[1118,28641],{},"\nAnother option is if the assembly is installed in the GAC, you can use publisher policy to redirect loads for version 1.0.0.0 to version 1.0.0.1. However, publisher policy is complicated.",[1118,28644],{},"\nYet another option is to fix the bug and not change the assembly version number, so existing applications can still find the assembly. This is the approach the .NET Framework uses for bug fixes, although it’s not appropriate for new features or anything that breaks compatibility. If you are adding new features, you should bump the assembly version up and have applications rebuild to opt in to the new features.",[51,28647,28648],{},"Assemblies loaded in the GAC perform better as they are loaded from central system space and the verification process has already been completed.  The strong name ensures correct component versioning helping to prevent components with the same name from conflicting with each other.",[51,28650,28651],{},"To install assemblies in the GAC they must be strong named(signed).",[51,28653,28654],{},"Delay signing allows you to generate a partial signature during development with access only to the public key. ",[51,28656,28657],{},"The private key can be stored securely out of the hands of the developers and used to apply the final strong name signature just before shipping your code. ",[51,28659,28660],{},"Use the public key to delay sign your assemblies during development.",[51,28662,28663],{},"Because the assemblies are not fully signed yet, you’ll also have to configure your development machines to skip strong name signature verification for your key—otherwise, the .NET Framework will not allow you to load the delay-signed assemblies.  You must configure the .NET Framework to skip verification for the delay-signed assemblies using your public key. To do this, you use the sn.exe tool again. i.e. sn –Vr {assemblyName} ",[16,28665,28666,28667,28670],{},"Another options…to configure your development machine to ",[19,28668,28669],{},"skip all verification"," for delay signed assemblies signed with a particular key.  Using sn –T {assemblyName} will give you the public key token.  Then execute the following to skip strong name verification for any assembly using that public key token sn – Vr *,{public token}  Any assembly delay signed with that public key will now skip strong name signature verification and run on your development machine.  It should never be done on production computers because it opens up those machines to assembly spoofing attacks. ",[16,28672,28673],{},"Another technique to acquire the public key token is to use the public key file alone.\ni.e. sn – tp {publickeyfile}",[48,28675,28676],{},[51,28677,28678,28679,28683,28684,28687],{},"When you are ready to ship your code, use the (well guarded) private key to apply the final strong name signature to your delay-signed assemblies.  sn –R {assemblyName} {your key file}  Now your assembly has a full signature.  It is possible to use command line “",[1139,28680,28682],{"href":28681,"target":1142},"http:\u002F\u002Fwww.microsoft.com\u002Fresources\u002Fdocumentation\u002Fwindows\u002Fxp\u002Fall\u002Fproddocs\u002Fen-us\u002Ffor.mspx?mfr=true","For","” command to iterate over each dll saving a lot of typing\ni.e. for {%variable|%%variable} in (set) do command ",[4215,28685,28686],{}," CommandLineOptions","\nfor %f in (*.dll) do sn –R %f MyKeyFile.snk",[16,28689,28690],{},"if you use this within a batch file replace %f with %ff",[16,28692,28693],{},"Additional Notes:",[48,28695,28696,28699,28702],{},[51,28697,28698],{},"Create a strong name key (often your organization will already have one established)\ni.e. sn –k MyKeyFile.snk  This creates a strong name key pair (both public and private keys in the same file)",[51,28700,28701],{},"Developers typically only need the public key portion.  sn –p MyKeyFile.snk MyKeyFilePublic.snk  This extracts the public key and creates a new file MyKeyFilePublic.snk.  At this point, MyKeyFile.snk should be put in a save location and available to Administrators only",[51,28703,28704],{},"To access the public key value and token sn – tp MyKeyFIlePublic.snk.  At this point, store the output in a text file somewhere.  We will use both the public key value and token.",[156,28706],{"style":15880,"src":28707,"alt":1080},"\u002Farticles\u002Fimages\u002Fstrong.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":28709},[],"2015-04-20T08:07:15.6200000-04:00",{},"\u002Farticles\u002Fstrong-names-and-signing-assemblies-net",{"title":28559,"description":1915},"articles\u002Fstrong-names-and-signing-assemblies-net",[8526],"ObgnfB7dmw3KHuTDCYm1Z1HRlE1trT6XiP7-DYrKozk",{"id":28718,"title":28719,"author":8,"body":28720,"createdAt":28746,"description":28747,"extension":1101,"img":21521,"meta":28748,"navigation":1104,"path":28749,"seo":28750,"stem":28751,"tags":28752,"updatedAt":28746,"__hash__":28753},"articles\u002Farticles\u002Fenterprise-library-configuration-and-visual-studio.md","Enterprise Library Configuration and Visual Studio",{"type":10,"value":28721,"toc":28744},[28722,28728,28735,28738,28741],[16,28723,28724,28725,28727],{},"If your company decides to sign their Enterprise Library files with their public and private keys the default Ent LIb Configuration tool that is integrated with Visual Studio will not by default use the newly signed assemblies.  The following is a brief description on how to update your system so that the appropriate assemblies are used.",[1118,28726],{},"\n1.) Add the following registry key and values to the registry",[13,28729,28730,28731,28734],{},"  \nHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Packages\\{488366a4-630c-4a0e-a6a2-b019cee13bea}\\",[19,28732,28733],{},"{ConfigurationSets}","  \nYou need to add an additional configuration set.  By default you will see the Microsoft Signed set.  Below is how the new key will be set up.   In the following example you will need to change the paths for ConfigurationUIAssemblyPath and ConfigurationUIPluginDirectory to point to where your company signed assemblies are located.  \n",[13,28736,28737],{},"  \n{Your Set Name}     \n     (Default) REG_SZ (Value not set)      \n     (ConfigurationUIAdapterClass) REG_SZ Microsoft.Practices.EnterpriseLibrary.Configuration.Design.UI.SingleHierarchyConfigurationUIHostAdapter      \n     (ConfigurationUIAssemblyPath) REG_SZ C:\\CompanySigned\\GAC\\EnterpriseLibrary\\Microsoft.Practices.EnterpriseLibrary.Configuration.Design.UI.dll      \n     (ConfigurationUIPluginDirectory) REG_SZ C:\\CompanySigned\\GAC\\EnterpriseLibrary  \n",[1139,28739,28740],{"href":28740},"http:\u002F\u002Fentlib.codeplex.com\u002FThread\u002FView.aspx?ThreadId=30986",[1139,28742,28743],{"href":28743},"http:\u002F\u002Fblogs.msdn.com\u002Fb\u002Ftomholl\u002Farchive\u002F2007\u002F04\u002F19\u002Favoiding-configuration-pitfalls-with-incompatible-copies-of-enterprise-library.aspx",{"title":1080,"searchDepth":1081,"depth":1081,"links":28745},[],"2015-04-20T08:07:15.4300000-04:00","Standardizing on Enterprise Library",{},"\u002Farticles\u002Fenterprise-library-configuration-and-visual-studio",{"title":28719,"description":28747},"articles\u002Fenterprise-library-configuration-and-visual-studio",[21527],"GATgvYdV4wmFRXY_FOdmfrE217by8SBpnuLvn1rFils",{"id":28755,"title":28756,"author":8,"body":28757,"createdAt":29172,"description":1915,"extension":1101,"img":29173,"meta":29174,"navigation":1104,"path":29175,"seo":29176,"stem":29177,"tags":29178,"updatedAt":29172,"__hash__":29179},"articles\u002Farticles\u002Fsql-server-and-drop-all-objects-tables-views-stored-procedures-etc.md","SQL Server and Drop all Objects (Tables\u002FViews\u002FStored Procedures etc.)",{"type":10,"value":28758,"toc":29170},[28759,28762,29168],[16,28760,28761],{},"The following SQL will drop all SQL Server objects within a database.",[2232,28763,28765],{"className":7871,"code":28764,"language":7873,"meta":1080,"style":1080},"\u002F* Drop all non-system stored procs *\u002F \nDECLARE @name VARCHAR(128)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])    \nWHILE @name is not null    \nBEGIN    \n    SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'    \n    EXEC (@SQL)    \n    PRINT 'Dropped Procedure: ' + @name    \n    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \nEND    \nGO  \n\u002F* Drop all views *\u002F     \nDECLARE @name VARCHAR(128)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])    \nWHILE @name IS NOT NULL    \nBEGIN    \n    SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'    \n    EXEC (@SQL)    \n    PRINT 'Dropped View: ' + @name    \n    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \nEND    \nGO  \n\u002F* Drop all functions *\u002F     \nDECLARE @name VARCHAR(128)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])    \nWHILE @name IS NOT NULL    \nBEGIN    \n    SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'    \n    EXEC (@SQL)    \n    PRINT 'Dropped Function: ' + @name    \n    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] &gt; @name ORDER BY [name])    \nEND    \nGO  \n\u002F* Drop all Foreign Key constraints *\u002F     \nDECLARE @name VARCHAR(128)    \nDECLARE @constraint VARCHAR(254)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)    \nWHILE @name is not null    \nBEGIN    \n    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n    WHILE @constraint IS NOT NULL    \n    BEGIN    \n        SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT ' + RTRIM(@constraint)    \n        EXEC (@SQL)    \n        PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name    \n        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME &lt;&gt; @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n    END    \nSELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)    \nEND    \nGO  \n\u002F* Drop all Primary Key constraints *\u002F     \nDECLARE @name VARCHAR(128)    \nDECLARE @constraint VARCHAR(254)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)    \nWHILE @name IS NOT NULL    \nBEGIN    \n    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n    WHILE @constraint is not null    \n    BEGIN    \n        SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT ' + RTRIM(@constraint)    \n        EXEC (@SQL)    \n        PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name    \n        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME &lt;&gt; @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n    END    \nSELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)    \nEND    \nGO  \n\u002F* Drop all tables *\u002F     \nDECLARE @name VARCHAR(128)    \nDECLARE @SQL VARCHAR(254)    \nSELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])    \nWHILE @name IS NOT NULL    \nBEGIN    \n    SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'    \n    EXEC (@SQL)    \n    PRINT 'Dropped Table: ' + @name    \nSELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \nEND    \nGO\n",[2239,28766,28767,28772,28777,28782,28787,28792,28797,28802,28807,28812,28817,28822,28827,28832,28836,28840,28845,28850,28854,28859,28863,28868,28873,28877,28881,28886,28890,28894,28899,28903,28907,28912,28916,28921,28926,28930,28934,28939,28943,28948,28952,28957,28961,28965,28970,28975,28980,28985,28990,28995,29000,29005,29009,29013,29017,29022,29027,29032,29037,29043,29048,29053,29058,29064,29069,29073,29078,29084,29090,29095,29100,29105,29109,29115,29119,29124,29130,29134,29138,29143,29148,29153,29159,29163],{"__ignoreMap":1080},[4215,28768,28769],{"class":4217,"line":4218},[4215,28770,28771],{},"\u002F* Drop all non-system stored procs *\u002F \n",[4215,28773,28774],{"class":4217,"line":1081},[4215,28775,28776],{},"DECLARE @name VARCHAR(128)    \n",[4215,28778,28779],{"class":4217,"line":1084},[4215,28780,28781],{},"DECLARE @SQL VARCHAR(254)    \n",[4215,28783,28784],{"class":4217,"line":4234},[4215,28785,28786],{},"SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])    \n",[4215,28788,28789],{"class":4217,"line":4240},[4215,28790,28791],{},"WHILE @name is not null    \n",[4215,28793,28794],{"class":4217,"line":4246},[4215,28795,28796],{},"BEGIN    \n",[4215,28798,28799],{"class":4217,"line":4252},[4215,28800,28801],{},"    SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'    \n",[4215,28803,28804],{"class":4217,"line":4258},[4215,28805,28806],{},"    EXEC (@SQL)    \n",[4215,28808,28809],{"class":4217,"line":4264},[4215,28810,28811],{},"    PRINT 'Dropped Procedure: ' + @name    \n",[4215,28813,28814],{"class":4217,"line":4270},[4215,28815,28816],{},"    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \n",[4215,28818,28819],{"class":4217,"line":4276},[4215,28820,28821],{},"END    \n",[4215,28823,28824],{"class":4217,"line":4282},[4215,28825,28826],{},"GO  \n",[4215,28828,28829],{"class":4217,"line":4288},[4215,28830,28831],{},"\u002F* Drop all views *\u002F     \n",[4215,28833,28834],{"class":4217,"line":4294},[4215,28835,28776],{},[4215,28837,28838],{"class":4217,"line":4300},[4215,28839,28781],{},[4215,28841,28842],{"class":4217,"line":4306},[4215,28843,28844],{},"SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])    \n",[4215,28846,28847],{"class":4217,"line":4312},[4215,28848,28849],{},"WHILE @name IS NOT NULL    \n",[4215,28851,28852],{"class":4217,"line":4318},[4215,28853,28796],{},[4215,28855,28856],{"class":4217,"line":4324},[4215,28857,28858],{},"    SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'    \n",[4215,28860,28861],{"class":4217,"line":4330},[4215,28862,28806],{},[4215,28864,28865],{"class":4217,"line":4336},[4215,28866,28867],{},"    PRINT 'Dropped View: ' + @name    \n",[4215,28869,28870],{"class":4217,"line":4342},[4215,28871,28872],{},"    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \n",[4215,28874,28875],{"class":4217,"line":4348},[4215,28876,28821],{},[4215,28878,28879],{"class":4217,"line":4353},[4215,28880,28826],{},[4215,28882,28883],{"class":4217,"line":4359},[4215,28884,28885],{},"\u002F* Drop all functions *\u002F     \n",[4215,28887,28888],{"class":4217,"line":4365},[4215,28889,28776],{},[4215,28891,28892],{"class":4217,"line":4371},[4215,28893,28781],{},[4215,28895,28896],{"class":4217,"line":4377},[4215,28897,28898],{},"SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])    \n",[4215,28900,28901],{"class":4217,"line":4383},[4215,28902,28849],{},[4215,28904,28905],{"class":4217,"line":4389},[4215,28906,28796],{},[4215,28908,28909],{"class":4217,"line":4395},[4215,28910,28911],{},"    SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'    \n",[4215,28913,28914],{"class":4217,"line":4401},[4215,28915,28806],{},[4215,28917,28918],{"class":4217,"line":4406},[4215,28919,28920],{},"    PRINT 'Dropped Function: ' + @name    \n",[4215,28922,28923],{"class":4217,"line":4412},[4215,28924,28925],{},"    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] &gt; @name ORDER BY [name])    \n",[4215,28927,28928],{"class":4217,"line":4418},[4215,28929,28821],{},[4215,28931,28932],{"class":4217,"line":4423},[4215,28933,28826],{},[4215,28935,28936],{"class":4217,"line":4429},[4215,28937,28938],{},"\u002F* Drop all Foreign Key constraints *\u002F     \n",[4215,28940,28941],{"class":4217,"line":4435},[4215,28942,28776],{},[4215,28944,28945],{"class":4217,"line":4440},[4215,28946,28947],{},"DECLARE @constraint VARCHAR(254)    \n",[4215,28949,28950],{"class":4217,"line":4446},[4215,28951,28781],{},[4215,28953,28954],{"class":4217,"line":4452},[4215,28955,28956],{},"SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)    \n",[4215,28958,28959],{"class":4217,"line":4458},[4215,28960,28791],{},[4215,28962,28963],{"class":4217,"line":4464},[4215,28964,28796],{},[4215,28966,28967],{"class":4217,"line":4469},[4215,28968,28969],{},"    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n",[4215,28971,28972],{"class":4217,"line":4475},[4215,28973,28974],{},"    WHILE @constraint IS NOT NULL    \n",[4215,28976,28977],{"class":4217,"line":4481},[4215,28978,28979],{},"    BEGIN    \n",[4215,28981,28982],{"class":4217,"line":4487},[4215,28983,28984],{},"        SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT ' + RTRIM(@constraint)    \n",[4215,28986,28987],{"class":4217,"line":4492},[4215,28988,28989],{},"        EXEC (@SQL)    \n",[4215,28991,28992],{"class":4217,"line":4498},[4215,28993,28994],{},"        PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name    \n",[4215,28996,28997],{"class":4217,"line":4504},[4215,28998,28999],{},"        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME &lt;&gt; @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n",[4215,29001,29002],{"class":4217,"line":4510},[4215,29003,29004],{},"    END    \n",[4215,29006,29007],{"class":4217,"line":4516},[4215,29008,28956],{},[4215,29010,29011],{"class":4217,"line":4521},[4215,29012,28821],{},[4215,29014,29015],{"class":4217,"line":18049},[4215,29016,28826],{},[4215,29018,29019],{"class":4217,"line":18054},[4215,29020,29021],{},"\u002F* Drop all Primary Key constraints *\u002F     \n",[4215,29023,29025],{"class":4217,"line":29024},56,[4215,29026,28776],{},[4215,29028,29030],{"class":4217,"line":29029},57,[4215,29031,28947],{},[4215,29033,29035],{"class":4217,"line":29034},58,[4215,29036,28781],{},[4215,29038,29040],{"class":4217,"line":29039},59,[4215,29041,29042],{},"SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)    \n",[4215,29044,29046],{"class":4217,"line":29045},60,[4215,29047,28849],{},[4215,29049,29051],{"class":4217,"line":29050},61,[4215,29052,28796],{},[4215,29054,29055],{"class":4217,"line":12398},[4215,29056,29057],{},"    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n",[4215,29059,29061],{"class":4217,"line":29060},63,[4215,29062,29063],{},"    WHILE @constraint is not null    \n",[4215,29065,29067],{"class":4217,"line":29066},64,[4215,29068,28979],{},[4215,29070,29071],{"class":4217,"line":17029},[4215,29072,28984],{},[4215,29074,29076],{"class":4217,"line":29075},66,[4215,29077,28989],{},[4215,29079,29081],{"class":4217,"line":29080},67,[4215,29082,29083],{},"        PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name    \n",[4215,29085,29087],{"class":4217,"line":29086},68,[4215,29088,29089],{},"        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME &lt;&gt; @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)    \n",[4215,29091,29093],{"class":4217,"line":29092},69,[4215,29094,29004],{},[4215,29096,29098],{"class":4217,"line":29097},70,[4215,29099,29042],{},[4215,29101,29103],{"class":4217,"line":29102},71,[4215,29104,28821],{},[4215,29106,29107],{"class":4217,"line":13052},[4215,29108,28826],{},[4215,29110,29112],{"class":4217,"line":29111},73,[4215,29113,29114],{},"\u002F* Drop all tables *\u002F     \n",[4215,29116,29117],{"class":4217,"line":12568},[4215,29118,28776],{},[4215,29120,29122],{"class":4217,"line":29121},75,[4215,29123,28781],{},[4215,29125,29127],{"class":4217,"line":29126},76,[4215,29128,29129],{},"SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])    \n",[4215,29131,29132],{"class":4217,"line":14495},[4215,29133,28849],{},[4215,29135,29136],{"class":4217,"line":13498},[4215,29137,28796],{},[4215,29139,29140],{"class":4217,"line":10672},[4215,29141,29142],{},"    SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'    \n",[4215,29144,29146],{"class":4217,"line":29145},80,[4215,29147,28806],{},[4215,29149,29150],{"class":4217,"line":12953},[4215,29151,29152],{},"    PRINT 'Dropped Table: ' + @name    \n",[4215,29154,29156],{"class":4217,"line":29155},82,[4215,29157,29158],{},"SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] &gt; @name ORDER BY [name])    \n",[4215,29160,29161],{"class":4217,"line":8375},[4215,29162,28821],{},[4215,29164,29166],{"class":4217,"line":29165},84,[4215,29167,18301],{},[4682,29169,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":29171},[],"2015-04-20T08:07:15.3400000-04:00","\u002Farticles\u002Fimages\u002Fsql.jpg",{},"\u002Farticles\u002Fsql-server-and-drop-all-objects-tables-views-stored-procedures-etc",{"title":28756,"description":1915},"articles\u002Fsql-server-and-drop-all-objects-tables-views-stored-procedures-etc",[7873,8743],"-AosXGHvi-Nm2hxkKypyQPWlfVYZ_LUe68mREC3CbRY",{"id":29181,"title":29182,"author":8,"body":29183,"createdAt":29251,"description":29252,"extension":1101,"img":29253,"meta":29254,"navigation":1104,"path":29255,"seo":29256,"stem":29257,"tags":29258,"updatedAt":29251,"__hash__":29260},"articles\u002Farticles\u002Fsharepoint-ghostable-and-ghostableinlibrary.md","SharePoint– Ghostable and GhostableInLibrary",{"type":10,"value":29184,"toc":29249},[29185,29188,29208,29211,29214],[16,29186,29187],{},"The Type attribute on a file defined in a SharePoint module have values of Ghostable and GhostableInLibrary",[16,29189,29190,29191,29194,29195,29197,29198,1158,29201,29204,29205,29207],{},"If Type is ",[19,29192,29193],{},"not"," defined they are considered UnGhostable\nOk, so do you remember what this means? I tend to always forget and mix up the definitions.",[1118,29196],{},"\nWhat does ",[19,29199,29200],{},"Ghost",[19,29202,29203],{},"UnGhost"," mean?",[1118,29206],{},"\nWhen a site is provisioned SharePoint doesn’t really copy the pages for that site (i.e. default.aspx) into a new database table or directory\nThese files exist only once on each of the front end web servers",[16,29209,29210],{},"Instead SharePoint, creates a reference to those files in the database tables that define the new site\nThis is called “ghosting”",[16,29212,29213],{},"The end result is that each site appears to have it’s own pages but in reality they are shared across all sites that use that site definition\nThis technique improves performance as SharePoint can retrieve this file from the file system (which is faster than performing a database operation)\nIn addition caching a single file is more efficient than caching files for each site that exists in the farm",[16,29215,29216,29217,29219,29220,29222,29223,29225,29226,1158,29229,29232,29233,29235,29236,29238,29239,29241,29242,29244,29245,29248],{},"The process of ghosting is a huge benefit to SharePoint and performance.",[1118,29218],{},"\nSome operations, say when editing a file with SharePoint designer it causes SharePoint to unghost the file which creates a copy of the page in the database and allows users to customize particular pages for that site without effecting other sites\nUnghosting however does negatively effect performance and makes global changes to the entire site collection difficult.",[1118,29221],{},"\nSo, in short ghosted means the file is shared across sites and each site has a pointer to a file on the file system\nUnghosted implies that the file has been edited and is now stored with the particular site.",[1118,29224],{},"\nWhat’s the difference between ",[19,29227,29228],{},"Ghostable",[19,29230,29231],{},"GhostableInLibrary","?",[1118,29234],{},"\nThe decision between Ghostable and GhostableInLibrary really is based on the type of file that you are deploying and whether you want users to view and access the document view a list or a library\nIf you desire users to view the file within a library then you would select the InLibrary option\nBoth ",[19,29237,29228],{}," \u002F ",[19,29240,29231],{}," implies that the file will be cached in memory\n",[19,29243,29231],{}," however specifies that the file be cached as part of a list whose base type is ",[19,29246,29247],{},"Document"," \u003C\nstrong>Library and that you can work with the file as you would with any other file in the library (check-in, check-out, version history).",{"title":1080,"searchDepth":1081,"depth":1081,"links":29250},[],"2015-04-20T08:07:15.0900000-04:00","What is Ghostable (only with SharePoint)","\u002Farticles\u002Fimages\u002Fghost.jpg",{},"\u002Farticles\u002Fsharepoint-ghostable-and-ghostableinlibrary",{"title":29182,"description":29252},"articles\u002Fsharepoint-ghostable-and-ghostableinlibrary",[29259],"sharePoint","qAPURpUfrJzaGl2u07duBzMGxh3lnlHGZuCZsRJhIiM",{"id":29262,"title":29263,"author":8,"body":29264,"createdAt":29277,"description":1915,"extension":1101,"img":29274,"meta":29278,"navigation":1104,"path":29279,"seo":29280,"stem":29281,"tags":29282,"updatedAt":29277,"__hash__":29283},"articles\u002Farticles\u002Fnet-4-with-sharepoint-foundation-2010.md",".Net 4 with SharePoint Foundation 2010",{"type":10,"value":29265,"toc":29275},[29266,29269,29272],[16,29267,29268],{},"Error: Microsoft SharePoint is not supported with version 4.0.30319.1 of the Microsoft .Net Runtime.   ",[16,29270,29271],{},"The SharePoint Foundation 2010 object model is not accessible using the .NET Framework 4 (or later). Calling any object or method in the object\nmodel using any framework version other than .NET 3.5 will throw the above exception.     It is possible to access the SharePoint objects using the web\nservices interface from your .NET 4 application, but this will only allow limited functionality of the complete object model.",[156,29273],{"src":29274,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Ftemplate.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":29276},[],"2015-04-20T08:07:14.8800000-04:00",{},"\u002Farticles\u002Fnet-4-with-sharepoint-foundation-2010",{"title":29263,"description":1915},"articles\u002Fnet-4-with-sharepoint-foundation-2010",[15562],"NgPwXCaoHDkIyDZDEtzfd4_aO-RAP9En7jzpvwNPODA",{"id":29285,"title":29286,"author":8,"body":29287,"createdAt":29310,"description":29291,"extension":1101,"img":29307,"meta":29311,"navigation":1104,"path":29312,"seo":29313,"stem":29314,"tags":29315,"updatedAt":29310,"__hash__":29316},"articles\u002Farticles\u002Fsharepoint-2010-blank-page-instead-of-site.md","SharePoint 2010 Blank Page instead of site",{"type":10,"value":29288,"toc":29308},[29289,29292,29299],[16,29290,29291],{},"If you are getting a blank page after creating a new site (and often after creating a new web application) you may need to modify the Application Pool associated with the web application.  Open IIS and select the pool then advanced properties.  I am running SharePoint 2010 on a Windows 7 64 bit installation.",[16,29293,29294,29295,29298],{},"Ensure ‘Enable 32-Bit Applications’ is set to ",[19,29296,29297],{},"False"," (by default this is set to True). ",[16,29300,29301,29302,29304,29305],{},"In addition, I have set the Ping Enabled to ",[19,29303,29297],{}," (default is True).  This will ensure that when walking through the code IIS will not time out.",[156,29306],{"src":29307,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002FShoppingCartEmpty.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":29309},[],"2015-04-20T08:07:14.8100000-04:00",{},"\u002Farticles\u002Fsharepoint-2010-blank-page-instead-of-site",{"title":29286,"description":29291},"articles\u002Fsharepoint-2010-blank-page-instead-of-site",[15562],"LIrRB5mi4lrLLokTntfMiyuBnW6OZXZRQHMD3DBZUOY",{"id":29318,"title":29319,"author":8,"body":29320,"createdAt":29392,"description":1915,"extension":1101,"img":29389,"meta":29393,"navigation":1104,"path":29394,"seo":29395,"stem":29396,"tags":29397,"updatedAt":29392,"__hash__":29398},"articles\u002Farticles\u002Fcanadian-developers-where-are-you.md","Canadian Developers–Where are you?",{"type":10,"value":29321,"toc":29390},[29322,29336,29387],[16,29323,29324,29325,29329,29330,29333,7815],{},"Okay, after an online search for the Canadian developer ‘pulse’ I resorted to twitter to aid in my search.  My calls were heard by  ",[1139,29326,29328],{"href":29327,"target":1142},"http:\u002F\u002Ftwitter.com\u002Fjbristowe","@jbristowe"," and in return he provided a great twitter and blog list of developers in Canada that he was aware of (",[1139,29331],{"href":29332},"http:\u002F\u002Fblogs.msdn.com\u002Fb\u002Fcdndevs\u002Farchive\u002F2010\u002F10\u002F03\u002Fdevelopers-in-canada-you-should-follow-on-twitter.aspx",[1139,29334,29332],{"href":29332,"rel":29335},[3695],[16,29337,29338,29339,11776,29342,29345,29348,29349,29352,29353,29356,29359,29361,29362,14501,29364,29366,29367,14501,29369,19679,29371,29373,29374,29377,29381,29382,29384],{},"In return, I created a ",[19,29340,29341],{},"twitter list",[1139,29343],{"href":29344},"http:\u002F\u002Ftwitter.com\u002F#\u002Flist\u002Fdyardy\u002Fcdndevs",[1139,29346,29344],{"href":29344,"rel":29347},[3695]," so others can connect and communicate much easier.  In addition I created an RSS feed for all the respective blogs\u002Frss feeds associated with the developers on the twitter list.  The ",[19,29350,29351],{},"Google Reader (RSS) bundle"," link can be found here ",[1139,29354],{"href":29355},"http:\u002F\u002Fwww.google.com\u002Freader\u002Fbundle\u002Fuser\u002F04940798407978267246\u002Fbundle\u002FCanadian%20Developers%20via%20%40dyardy",[1139,29357,29355],{"href":29355,"rel":29358},[3695],[1118,29360],{},"\nI will be maintaining both of these lists, so please let me know if you are missing from the list (or would like to be added).",[1118,29363],{},[1118,29365],{},"\nI grew up around Peterborough, Ontario and graduated from Queen’s Engineering.  I often return to Ontario to visit with friends and family.  I would love to develop a relationship with developers in Canada and connect with them at user groups or developer events.",[1118,29368],{},[1118,29370],{},[1118,29372],{},"\nLinkedIn Discussion Group (for Canadian Developers) ",[1139,29375],{"href":29376},"http:\u002F\u002Fwww.linkedin.com\u002Fgroups?mostPopular=&gid=3398140",[1139,29378,29379],{"href":29379,"rel":29380},"http:\u002F\u002Fwww.linkedin.com\u002Fgroups?mostPopular=&amp;gid=3398140",[3695],"\nMicrosoft Canadian Evangelist list ",[1139,29383],{"href":29332},[1139,29385,29332],{"href":29332,"rel":29386},[3695],[156,29388],{"src":29389,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fcanada+flag.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":29391},[],"2015-04-20T08:07:14.7500000-04:00",{},"\u002Farticles\u002Fcanadian-developers-where-are-you",{"title":29319,"description":1915},"articles\u002Fcanadian-developers-where-are-you",[20377],"S3ujHYMDowqAGkxJLoSbESKd46cl_pAJzSQJiPewK0U",{"id":29400,"title":29401,"author":8,"body":29402,"createdAt":29736,"description":29737,"extension":1101,"img":29733,"meta":29738,"navigation":1104,"path":29739,"seo":29740,"stem":29741,"tags":29742,"updatedAt":29736,"__hash__":29743},"articles\u002Farticles\u002Fdesign-guidelines-classes-vs-structures.md","Design Guidelines– Classes vs. Structures",{"type":10,"value":29403,"toc":29734},[29404,29416,29508,29523,29527,29529,29556,29670,29676,29705,29708,29728,29731],[16,29405,29406,29407,29409,29411,29412,29415],{},"My goal is to cover some .NET 4 Platform features through a series of ‘guideline’ type entries demonstrating some new and existing functionality.  In this first entry, I have seen both classes and structures used throughout applications.  The following is meant to describe and explain good design considerations.",[1118,29408],{},[19,29410,4042],{}," types are well suited for modeling mathematical, geometrical, and other \"atomic\" entities in your application. A ",[19,29413,29414],{},"structure"," (like an enumeration) is a user-defined type; however, structures are not simply a collection of name\u002Fvalue pairs. Rather, structures are types that can contain any number of data fields and members that operate on these fields.",[9636,29417,10274,29418,10274],{"id":25390,"style":25391},[9636,29419,10274,29420,10274,10274,29426,10274,10274,29431,10274,10274,29438,10274,10274,29445,10274,10274,29447,10274,10274,29452,10274,10274,29459,10274,10274,29462,10274,10274,29464,10274,10274,29466,10274,10274,29471,10274,10274,29478,10274,10274,29481,10274,10274,29483,10274,10274,29485,10274,10274,29490,10274,10274,29497,10274,10274,29504,10274,10274,29506,10274],{"id":25394,"style":25395},[2232,29421,29422,29425],{"style":25398},[4215,29423,29424],{"style":23447},"struct"," Point {",[2232,29427,11983,29428],{"style":25409},[4215,29429,29430],{"style":24383},"\u002F\u002F Fields of the structure.",[2232,29432,11983,29433,11776,29435,29437],{"style":25398},[4215,29434,14963],{"style":23447},[4215,29436,25793],{"style":23447}," X;",[2232,29439,11983,29440,11776,29442,29444],{"style":25409},[4215,29441,14963],{"style":23447},[4215,29443,25793],{"style":23447}," Y;",[2232,29446,8422],{"style":25398},[2232,29448,11983,29449],{"style":25409},[4215,29450,29451],{"style":24383},"\u002F\u002F Add 1 to the (X, Y) position.",[2232,29453,11983,29454,11776,29456,29458],{"style":25398},[4215,29455,14963],{"style":23447},[4215,29457,21296],{"style":23447}," Increment() {",[2232,29460,29461],{"style":25409},"        X++; Y++;",[2232,29463,23478],{"style":25398},[2232,29465,8422],{"style":25409},[2232,29467,11983,29468],{"style":25398},[4215,29469,29470],{"style":24383},"\u002F\u002F Subtract 1 from the (X, Y) position.",[2232,29472,11983,29473,11776,29475,29477],{"style":25409},[4215,29474,14963],{"style":23447},[4215,29476,21296],{"style":23447}," Decrement() {",[2232,29479,29480],{"style":25398},"        X--; Y--;",[2232,29482,23478],{"style":25409},[2232,29484,8422],{"style":25398},[2232,29486,11983,29487],{"style":25409},[4215,29488,29489],{"style":24383},"\u002F\u002F Display the current position.",[2232,29491,11983,29492,11776,29494,29496],{"style":25398},[4215,29493,14963],{"style":23447},[4215,29495,21296],{"style":23447}," Display() {",[2232,29498,29499,29500,29503],{"style":25409},"        Console.WriteLine(",[4215,29501,29502],{"style":23512},"\"X = {0}, Y = {1}\"",", X, Y);",[2232,29505,23478],{"style":25398},[2232,29507,23497],{"style":25409},[16,29509,29510,29511,29513,29514,29516,29517,29519,29520,29522],{},"myPoint.X=100;\nmyPoint.Y=76;\nmyPoint.Display();",[1118,29512],{},"\nYou can create a structure using new keyword which will use the structures’ default constructor.",[1118,29515],{},"\ni.e. Point myPoint = new Point(); \u002F\u002F each field will be automatically set to its default value",[1118,29518],{},"\nA custom constructor can also be created with a structure which allows you to specify the values of a field upon creation.",[1118,29521],{},"\ni.e. Public Point(int xpos, int ypos)\nPoint p2 = new Point(50,50);",[16,29524,29525],{},[19,29526,26991],{},[19,29528],{},[16,29530,29531,29533,29534,29537,29538,29540,29541,29543,29544,29546,29549,29550,29552,29555],{},[19,29532],{},"A class is a user-defined type that is composed of field data (often called ",[1128,29535,29536],{},"member variables",") and members that operate on this data (such as constructors, properties, methods, events, and so forth). Collectively, the set of field data represents the \"state\" of a class instance (otherwise known as an ",[1128,29539,23468],{},"). The power of object-based languages such as C# is that by grouping data and related functionality in a unified class definition, you are able to model your software after entities in the real world.",[1118,29542],{},"\nI am going to jump to some less known aspects of a class.",[1118,29545],{},[1128,29547,29548],{},"Default constructor",": By definition, a default constructor never takes arguments.  After allocating the new object into memory, the default constructor ensures that all field data of the class is set to an appropriate default value.\nCustom constructor:Allows the user with a simple and consistent way to initialize the state of an object directly at the time of creation.  Note however that as soon as you define a custom constructor the compiler removes the default constructor.  Thereby if you wish to continue to have both a default and custom constructors you must explicitly declare the default constructor.",[1118,29551],{},[1128,29553,29554],{},"Chaining constructors ","utilizes the ‘this’ keyword.  Understand that using the this keyword to chain constructor calls is never mandatory.  Notice in the example below however that the constructor Public Motorcycle(string name) takes one string argument but continues to call the additional constructor Public Motorcyle(int intensity, string name) via the this keyword i.e. this(0,name)",[9636,29557,10274,29558,10274],{"id":25390,"style":25391},[9636,29559,10274,29560,10274,10274,29565,10274,10274,29567,10274,10274,29574,10274,10274,29581,10274,10274,29583,10274,10274,29588,10274,10274,29593,10274,10274,29601,10274,10274,29611,10274,10274,29613,10274,10274,29620,10274,10274,29625,10274,10274,29627,10274,10274,29632,10274,10274,29641,10274,10274,29644,10274,10274,29649,10274,10274,29651,10274,10274,29654,10274,10274,29656,10274,10274,29659,10274,10274,29662,10274,10274,29665,10274,10274,29668,10274],{"id":25394,"style":25395},[2232,29561,29562,29564],{"style":25398},[4215,29563,14966],{"style":23447}," Motorcycle",[2232,29566,23457],{"style":25409},[2232,29568,13053,29569,11776,29571,29573],{"style":25398},[4215,29570,14963],{"style":23447},[4215,29572,25793],{"style":23447}," driverIntensity;",[2232,29575,13053,29576,11776,29578,29580],{"style":25409},[4215,29577,14963],{"style":23447},[4215,29579,15022],{"style":23447}," driverName;",[2232,29582,8422],{"style":25398},[2232,29584,13053,29585],{"style":25409},[4215,29586,29587],{"style":24383},"\u002F\u002F Constructor chaining.",[2232,29589,13053,29590,29592],{"style":25398},[4215,29591,14963],{"style":23447}," Motorcycle() {}",[2232,29594,13053,29595,29597,29598,29600],{"style":25409},[4215,29596,14963],{"style":23447}," Motorcycle(",[4215,29599,25793],{"style":23447}," intensity)",[2232,29602,29603,29604,29607,29608,29610],{"style":25398},"    : ",[4215,29605,29606],{"style":23447},"this","(intensity, ",[4215,29609,23555],{"style":23512},") {}",[2232,29612,8422],{"style":25409},[2232,29614,13053,29615,29597,29617,29619],{"style":25398},[4215,29616,14963],{"style":23447},[4215,29618,15022],{"style":23447}," name)",[2232,29621,29603,29622,29624],{"style":25409},[4215,29623,29606],{"style":23447},"(0, name) {}",[2232,29626,8422],{"style":25398},[2232,29628,13053,29629],{"style":25409},[4215,29630,29631],{"style":24383},"\u002F\u002F This is the 'master' constructor that does all the real work.",[2232,29633,13053,29634,29597,29636,29638,29639,29619],{"style":25398},[4215,29635,14963],{"style":23447},[4215,29637,25793],{"style":23447}," intensity, ",[4215,29640,15022],{"style":23447},[2232,29642,29643],{"style":25409},"  {",[2232,29645,11983,29646,29648],{"style":25398},[4215,29647,15223],{"style":23447}," (intensity > 10)",[2232,29650,23472],{"style":25409},[2232,29652,29653],{"style":25398},"      intensity = 10;",[2232,29655,23478],{"style":25409},[2232,29657,29658],{"style":25398},"    driverIntensity = intensity;",[2232,29660,29661],{"style":25409},"    driverName = name;",[2232,29663,29664],{"style":25398},"  }",[2232,29666,29667],{"style":25409},"...",[2232,29669,23497],{"style":25398},[16,29671,29672,29675],{},[1128,29673,29674],{},"Optional Arguments"," allow you to define supplied default values to the incoming arguments.  i.e. with the constructor below the user can create a new RocketShip with zero, one or two arguments.  This is a .NET 4 feature only.\nRocketShip = new RocketShip();\nRocketShip = new RocketShip(name:=”TestShip”);\nRocketShip = new RocketShip(10); \u002F\u002Fsets speed = 10, leaving name =  ””",[9636,29677,10274,29678,10274],{"id":25390,"style":25391},[9636,29679,10274,29680,10274,10274,29685,10274,10274,29699,10274,10274,29702,10274,23497],{"id":25394,"style":25395},[2232,29681,29682],{"style":25398},[4215,29683,29684],{"style":24383},"\u002F\u002F Single constructor using optional args.",[2232,29686,29687,29689,29690,29692,29693,29695,29696,29698],{"style":25409},[4215,29688,14963],{"style":23447}," RocketShip(",[4215,29691,25793],{"style":23447}," speed = 0, ",[4215,29694,15022],{"style":23447}," name = ",[4215,29697,23555],{"style":23512},"){",[2232,29700,29701],{"style":25409},"  driverSpeed = speed;",[2232,29703,29704],{"style":25398},"  driverName = name;",[19,29706,29707],{},"Classes vs. Structures Guidelines",[48,29709,29710,29713,29716,29719,29722,29725],{},[51,29711,29712],{},"Consider defining a structure instead of a class if instances of the type are small and commonly short-lived or are commonly embedded in other objects.",[51,29714,29715],{},"Do not define a structure unless the type has all the following characteristics:",[51,29717,29718],{},"It logically represents a single value, similar to primitive types (integer, double, and so on).",[51,29720,29721],{},"It has an instance size smaller than 16 bytes.",[51,29723,29724],{},"It is immutable.",[51,29726,29727],{},"It will not have to be boxed frequently.",[13,29729,29730],{},"  \nIf one or more of these conditions are not met, create a reference type instead of a structure. Failure to adhere to this guideline can negatively impact performance.  \n",[156,29732],{"style":15880,"src":29733,"alt":1080},"\u002Farticles\u002Fimages\u002Fstructure2.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":29735},[],"2015-04-20T08:07:14.6400000-04:00","My goal is to cover some .NET 4 Platform features through a series of &lsquo;guideline&rsquo; type entries demonstrating some new and existing functionality.",{},"\u002Farticles\u002Fdesign-guidelines-classes-vs-structures",{"title":29401,"description":29737},"articles\u002Fdesign-guidelines-classes-vs-structures",[10632],"-N3gPMr8ZsjnQA0jdKCMNLjbID8lUwbxN-6kUVEFlhA",{"id":29745,"title":29746,"author":8,"body":29747,"createdAt":29886,"description":29887,"extension":1101,"img":1915,"meta":29888,"navigation":1104,"path":29889,"seo":29890,"stem":29891,"tags":29892,"updatedAt":29886,"__hash__":29893},"articles\u002Farticles\u002Ffeature-eventreceiver-get-web-context.md","Feature.EventReceiver Get Web Context",{"type":10,"value":29748,"toc":29884},[29749,29788],[16,29750,29751,29752,29754,29755,29757,29758,29760,29761,29763,29764,14501,29766,29768,29771,29772,29775,29776,29779,29780,29783,29784,29787],{},"In order to get the current SPWeb context that the feature was activated on I have used the following extension method.  Regardless if the feature is web or site scoped the following GetWeb extension will return the current web context.",[1118,29753],{},"\nTypically, you would do something like the following.  This works fine if the feature is scoped for web.  If however it is scoped for Site then it will no longer work (.Parent becomes SPSite)",[1118,29756],{},"\nSPWeb site = (SPWeb)properties.Feature.Parent; ",[1118,29759],{},"\nUsing the following extension you can now use something like the following.",[1118,29762],{},"\nSPWeb web = properties.GetWeb();  \u002F\u002Fmuch cleaner",[1118,29765],{},[1118,29767],{},[4215,29769,25629],{"className":29770},[25204]," System;\n",[4215,29773,25629],{"className":29774},[25204]," System.Collections.Generic;\n",[4215,29777,25629],{"className":29778},[25204]," System.Linq;\n",[4215,29781,25629],{"className":29782},[25204]," System.Text;\n",[4215,29785,25629],{"className":29786},[25204]," Microsoft.SharePoint;",[16,29789,29790,11776,29793,11776,29796,29799,29800,29804,29808,29811,29815,29819,11776,29822,29825,29826,29833,29834,29837,29838,29841,29842,29845,29846,11776,29849,29841,29852,29855,29856,29859,29860,11776,29864,29867,29868,29872,29873,29876,29877,29879,29880,14501,29882,14501],{},[4215,29791,14963],{"className":29792},[25204],[4215,29794,21291],{"className":29795},[25204],[4215,29797,14966],{"className":29798},[25204]," Extensions\n{\n",[4215,29801,25498],{"className":29802},[29803],"rem",[4215,29805,29807],{"className":29806},[29803],"\u002F\u002F\u002F Gets the web.",[4215,29809,25508],{"className":29810},[29803],[4215,29812,29814],{"className":29813},[29803],"\u002F\u002F\u002F \u003Cparam name=\"properties\">The properties.\u003C\u002Fparam>",[4215,29816,29818],{"className":29817},[29803],"\u002F\u002F\u002F \u003Creturns>\u003C\u002Freturns>",[4215,29820,14963],{"className":29821},[25204],[4215,29823,21291],{"className":29824},[25204]," SPWeb\n",[4215,29827,14678,29829],{"className":29828},[29803],[1139,29830,29831],{"href":29831,"rel":29832},"http:\u002F\u002Fblog.mattsmith.co.nz\u002FLists\u002FPosts\u002FPost.aspx?List=c7bdac80-1d4e-4732-9e67-cefde9c03d31&amp;ID=51",[3695],"\nGetWeb(",[4215,29835,29606],{"className":29836},[25204]," SPFeatureReceiverProperties properties){\n    SPWeb site;\n    ",[4215,29839,15223],{"className":29840},[25204]," (properties.Feature.Parent ",[4215,29843,26493],{"className":29844},[25204]," SPWeb) {\n        site = (SPWeb)properties.Feature.Parent;\n    } ",[4215,29847,24870],{"className":29848},[25204],[4215,29850,15223],{"className":29851},[25204],[4215,29853,26493],{"className":29854},[25204]," SPSite) {\n        site = ((SPSite)properties.Feature.Parent).RootWeb;\n    } ",[4215,29857,24870],{"className":29858},[25204]," {\n        ",[4215,29861,29863],{"className":29862},[25204],"throw",[4215,29865,14601],{"className":29866},[25204]," Exception(",[4215,29869,29871],{"className":29870},[23350],"\"Unable to retrieve SPWeb - this feature is not Site or Web-scoped.\"",");\n    }\n    ",[4215,29874,15052],{"className":29875},[25204]," site;\n    }\n}",[1118,29878],{},"\nCool eh?",[1118,29881],{},[1118,29883],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":29885},[],"2015-04-20T08:07:14.5400000-04:00","In order to get the current SPWeb context that the feature was activated...",{},"\u002Farticles\u002Ffeature-eventreceiver-get-web-context",{"title":29746,"description":29887},"articles\u002Ffeature-eventreceiver-get-web-context",[15562],"0dvtWcX_WjOm6yWA2aUZbBzFdRBtbbC3K1kZCZu1pz4",{"id":29895,"title":29896,"author":8,"body":29897,"createdAt":29912,"description":1915,"extension":1101,"img":1915,"meta":29913,"navigation":1104,"path":29914,"seo":29915,"stem":29916,"tags":29917,"updatedAt":29912,"__hash__":29918},"articles\u002Farticles\u002Foutput-text-to-log-file.md","Output text to log file",{"type":10,"value":29898,"toc":29910},[29899,29904,29908],[16,29900,29901,29902,14501],{},"The following method can be used save string messages out to log files.  In the code below I am using a couple class fields to establish the log file name.  These can be customized to meet your need.",[1118,29903],{},[2232,29905,29907],{"className":29906},[18546,8723],"  \npublic void Output(string message) {  \n        if (_logFilePath != stringEmpty) {  \n        string fileName = \"LogFile\";  \n        if (_contentDatabaseName != string.Empty)  \n            fileName += \"_\" + _contentDatabaseName;  \n  \n        fileName += \".txt\";  \n        string filePath = System.IO.Path.Combine(_logFilePath, fileName);  \n        System.IO.StreamWriter sw = System.IO.File.AppendText(filePath); \u002F\u002F Change filename  \n        try {  \n            string logLine = System.String.Format(\"{0:G}: {1}.\", System.DateTime.Now, message);  \n            sw.WriteLine(logLine);  \n        } finally {  \n            sw.Close();  \n        }  \n    }  \n}",[16,29909,15552],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":29911},[],"2015-04-20T08:07:14.3500000-04:00",{},"\u002Farticles\u002Foutput-text-to-log-file",{"title":29896,"description":1915},"articles\u002Foutput-text-to-log-file",[8994],"-p4EpWiQEkv4r2hKPqYV9kpN3R2ct3mifyOTeovi3gM",{"id":29920,"title":29921,"author":8,"body":29922,"createdAt":30051,"description":30052,"extension":1101,"img":1915,"meta":30053,"navigation":1104,"path":30054,"seo":30055,"stem":30056,"tags":30057,"updatedAt":30051,"__hash__":30058},"articles\u002Farticles\u002Fsharepoint-method-return-splist-or-create-a-new-one.md","SharePoint Method–Return SPList (or Create a new one)",{"type":10,"value":29923,"toc":30049},[29924,29927,30045,30047],[16,29925,29926],{},"Method that returns an existing SPList on a SharePoint web (based on list name) or create a new one if not found.",[2232,29928,29930],{"className":8721,"code":29929,"language":8723,"meta":1080,"style":1080},"public static SPList EnsureList(SPWeb site, string listName, SPListTemplateType template, bool onQuickLaunch) {  \n      \n    SPList list = null;  \n    Guid listID = Guid.Empty;  \n    if (site != null) {  \n        foreach (SPList item in site.Lists) {  \n            if (item.Title.ToLower() == listName.ToLower()) {  \n                list = item;  \n                listID = item.ID;  \n                break;  \n            }  \n        }  \n  \n        if (list == null) {  \n            listID = site.Lists.Add(listName,\"\", template);  \n            list = site.Lists[listID];  \n            list.OnQuickLaunch = onQuickLaunch;  \n            list.Update();              \n        }  \n    } else {  \n        throw new Exception(\"In EnsureSiteDataList SPWeb is null\");  \n    }  \n    return list;  \n}  \n",[2239,29931,29932,29937,29941,29946,29951,29956,29961,29966,29971,29976,29981,29985,29989,29993,29998,30003,30008,30013,30018,30022,30027,30032,30036,30041],{"__ignoreMap":1080},[4215,29933,29934],{"class":4217,"line":4218},[4215,29935,29936],{},"public static SPList EnsureList(SPWeb site, string listName, SPListTemplateType template, bool onQuickLaunch) {  \n",[4215,29938,29939],{"class":4217,"line":1081},[4215,29940,17700],{},[4215,29942,29943],{"class":4217,"line":1084},[4215,29944,29945],{},"    SPList list = null;  \n",[4215,29947,29948],{"class":4217,"line":4234},[4215,29949,29950],{},"    Guid listID = Guid.Empty;  \n",[4215,29952,29953],{"class":4217,"line":4240},[4215,29954,29955],{},"    if (site != null) {  \n",[4215,29957,29958],{"class":4217,"line":4246},[4215,29959,29960],{},"        foreach (SPList item in site.Lists) {  \n",[4215,29962,29963],{"class":4217,"line":4252},[4215,29964,29965],{},"            if (item.Title.ToLower() == listName.ToLower()) {  \n",[4215,29967,29968],{"class":4217,"line":4258},[4215,29969,29970],{},"                list = item;  \n",[4215,29972,29973],{"class":4217,"line":4264},[4215,29974,29975],{},"                listID = item.ID;  \n",[4215,29977,29978],{"class":4217,"line":4270},[4215,29979,29980],{},"                break;  \n",[4215,29982,29983],{"class":4217,"line":4276},[4215,29984,15709],{},[4215,29986,29987],{"class":4217,"line":4282},[4215,29988,22877],{},[4215,29990,29991],{"class":4217,"line":4288},[4215,29992,10274],{},[4215,29994,29995],{"class":4217,"line":4294},[4215,29996,29997],{},"        if (list == null) {  \n",[4215,29999,30000],{"class":4217,"line":4300},[4215,30001,30002],{},"            listID = site.Lists.Add(listName,\"\", template);  \n",[4215,30004,30005],{"class":4217,"line":4306},[4215,30006,30007],{},"            list = site.Lists[listID];  \n",[4215,30009,30010],{"class":4217,"line":4312},[4215,30011,30012],{},"            list.OnQuickLaunch = onQuickLaunch;  \n",[4215,30014,30015],{"class":4217,"line":4318},[4215,30016,30017],{},"            list.Update();              \n",[4215,30019,30020],{"class":4217,"line":4324},[4215,30021,22877],{},[4215,30023,30024],{"class":4217,"line":4330},[4215,30025,30026],{},"    } else {  \n",[4215,30028,30029],{"class":4217,"line":4336},[4215,30030,30031],{},"        throw new Exception(\"In EnsureSiteDataList SPWeb is null\");  \n",[4215,30033,30034],{"class":4217,"line":4342},[4215,30035,11671],{},[4215,30037,30038],{"class":4217,"line":4348},[4215,30039,30040],{},"    return list;  \n",[4215,30042,30043],{"class":4217,"line":4353},[4215,30044,9887],{},[16,30046,15552],{},[4682,30048,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":30050},[],"2015-04-20T08:07:14.2600000-04:00","Method that returns an existing SPList on a SharePoint web",{},"\u002Farticles\u002Fsharepoint-method-return-splist-or-create-a-new-one",{"title":29921,"description":30052},"articles\u002Fsharepoint-method-return-splist-or-create-a-new-one",[15562],"23Ps1y5WrMGsI6PnpJjW-M6_FbRRv2pr0lErNFzPytw",{"id":30060,"title":30061,"author":8,"body":30062,"createdAt":30107,"description":1915,"extension":1101,"img":1915,"meta":30108,"navigation":1104,"path":30109,"seo":30110,"stem":30111,"tags":30112,"updatedAt":30107,"__hash__":30113},"articles\u002Farticles\u002Fiterate-over-object-properties-and-property-attributes-w-reflection.md","Iterate Over Object Properties and Property Attributes w\u002FReflection",{"type":10,"value":30063,"toc":30105},[30064,30067,30095,30101],[16,30065,30066],{},"Define custom attribute class as follows as well as placing the attribute reference on the property “FirstName”.  In the following we are creating our own custom attribute by defining an attribute class which derives from Attribute which makes identifying attribute definitions in metadata easy.  The AttributeUsage attribute can be used to limit which asset the attribute can be placed such as class, struct, property etc.  In addition, in the example below I have disallowed multiple similar attributes from being used on the same property designated by AllowMultiple = false     ",[2232,30068,11983,30070,30073,30075,30076,30082,30093],{"className":30069},[18546,8723],[4215,30071,30072],{},"AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)",[1118,30074],{},"\npublic class CustomItemAttribute : Attribute {",[2232,30077,30080],{"className":30078,"code":30079,"language":2237},[2235],"    public string FieldName { get; set; }  \n\n    private bool _isMultiValue = false;  \n    public bool IsMultiValue {  \n        get { return _isMultiValue; }  \n        set {  \n            _isMultiValue = value;  \n        }  \n    }  \n\n    public CustomItemAttribute(string fieldName) {  \n        this.FieldName = fieldName;          \n    }  \n}  \n",[2239,30081,30079],{"__ignoreMap":1080},[16,30083,30084,30085,30087,30090,30092],{},"public class Item{",[1118,30086],{},[4215,30088,30089],{},"CustomItem(\"myfieldname\")",[1118,30091],{},"\npublic string FirstName { get; set;}",[16,30094,23497],{},[16,30096,30097,30098,30100],{},"Now to iterate over the properties. Notice in the class Item above how we can exclude the 'Attribute' text in the name of the attribute applied to the FirstName property. Below we can use Type.GetProperties method to get the names of the properties for a specific type. The method GetProperties returns an array of PropertyInfo objects and the property names aer available through PropertyInfo.Name. If you want to get only a subset of the properties such as public static ones you can use BindingFlags parameters (Public\u002FNonPublic, Instance\u002FStatic). i.e. PropertyInfo",[4215,30099],{}," infos = typeof(Item).GetProperties(BindingFlags.Public|BindingFlags.Static);",[2232,30102,30104],{"className":30103},[18546,8723],"        private void IterateOverProperties() {  \n            CustomItemAttribute customItemAttribute;  \n            Type type = typeof(Item);  \n        \u002F\u002Ffor each property of object of Item  \n            foreach (PropertyInfo propInfo in type.GetProperties()) {  \n                \u002F\u002Ffor each custom attribute on the property loop  \n                foreach CustomItemAttribute attr in propInfo.GetCustomAttributes(typeof(CustomItemAttribute), false)) {  \n                    customItemAttribute = attr as CustomItemAttribute;  \n                    if (customItemAttribute != null) {  \n                        string propertyName = propInfo.Name;  \n                        string fieldName = customItemAttribute.FieldName;              \n            \u002F\u002FTODO: add your logic here  \n                    }   \n                }  \n            }  \n        }",{"title":1080,"searchDepth":1081,"depth":1081,"links":30106},[],"2015-04-20T08:07:14.1700000-04:00",{},"\u002Farticles\u002Fiterate-over-object-properties-and-property-attributes-w-reflection",{"title":30061,"description":1915},"articles\u002Fiterate-over-object-properties-and-property-attributes-w-reflection",[8994],"ZthYNR0xRiDSvIjg9fVGjlPJjgpoE9X9J0htudQFbIM",{"id":30115,"title":30116,"author":8,"body":30117,"createdAt":30151,"description":30152,"extension":1101,"img":30153,"meta":30154,"navigation":1104,"path":30155,"seo":30156,"stem":30157,"tags":30158,"updatedAt":30151,"__hash__":30159},"articles\u002Farticles\u002Fnet-4-new-gac-locations-gacutil.md",".NET 4 New GAC Locations\u002FGacUtil",{"type":10,"value":30118,"toc":30149},[30119,30122,30125,30128,30131,30134,30137,30140,30143,30146],[16,30120,30121],{}," This is what I know, let me know if you know otherwise.  There are now 2 distinct GAC locations that you have to manage as of the .NET 4 Framework release.",[16,30123,30124],{},"The GAC was split into two, one for each CLR (2.0, 3.5 AND 4.0).  The CLR version used for both .NET Framework 2.0 and .NET Framework 3.5 is CLR 2.0. To avoid issues between CLR 2.0 and CLR 4.0 , the GAC is now split into private GAC’s for each runtime.  The main change is that CLR v2.0 applications now cannot see CLR v4.0 assemblies in the GAC.",[16,30126,30127],{},"In previous .NET versions, when I installed a .NET assembly into the GAC (using gacutil.exe or even drag and drop to the c:\\windows\\assembly directory), I could find it in the ‘C:\\Windows\\assembly’ path.",[16,30129,30130],{},"With .NET 4.0, GAC is now located in the 'C:\\Windows\\Microsoft.NET\\assembly’ path.",[16,30132,30133],{},"In order to install a dll to the .NET 4 GAC it is necessary to use the gacutil found C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\GacUtil.exe  In addition, you can no longer use the drag n' drop (in reality the drag n' drop really executed the gacutil via a windows explorer extension).",[16,30135,30136],{},"After you use the gacutil.exe -i {path to dll} you can view that it is indeed in the gac via gacutil -l (which will list all dlls in the gac).  I used this command and piped the results to a text file via > out.txt which made it easier to find the recently added component.",[16,30138,30139],{},"I was not able to see my gac object in the directory for .net 4 (i.e. c:\\windows\\microsoft.net\\assembly path).  I am not sure why just yet.  Ideas?",[16,30141,30142],{},"At this point, the object is in the local gac however if you are using vs.net 2010 it will still not show up in the list of references. To get the component to show up in the VS.NET list of references can add a registry entry to HKLM\\SOFTWARE\\WOW6432Node\\Microsoft.NETFramework\\v4.0.30319\\AssemblyFoldersEx  At this point, the component is in the local GAC and is in the list of references to be used by vs.net.",[16,30144,30145],{},"Note, I did find that if I just added the path to the registry without adding it to the gac it was available to vs.net.  So, because the component is listed via vs.net add references it does not necessarily mean it is in the gac.",[16,30147,30148],{},"What still confuses me is that I am still unable to view my recently added component in the .NET 4 directories above.  Ideas?",{"title":1080,"searchDepth":1081,"depth":1081,"links":30150},[],"2015-04-20T08:07:14.0800000-04:00","There are now 2 distinct GAC locations that you have to manage as of the .NET 4 Framework release...","\u002Farticles\u002Fimages\u002Fggb4dMDcZM.png",{},"\u002Farticles\u002Fnet-4-new-gac-locations-gacutil",{"title":30116,"description":30152},"articles\u002Fnet-4-new-gac-locations-gacutil",[8994,21527],"2K_K7LqZ6HZ_OhbA_zCui0-ixHdV9XtLRHPoIkAcdss",{"id":30161,"title":30162,"author":8,"body":30163,"createdAt":30198,"description":30199,"extension":1101,"img":30200,"meta":30201,"navigation":1104,"path":30202,"seo":30203,"stem":30204,"tags":30205,"updatedAt":30198,"__hash__":30207},"articles\u002Farticles\u002Fchange-silverlight-class-library-to-application.md","Change Silverlight Class Library to Application",{"type":10,"value":30164,"toc":30196},[30165,30168,30175,30184,30187,30190,30193],[16,30166,30167],{},"Add New Item to the Silverlight Class project > Silverlight Application Class (This adds app.xaml, app.xaml.cs files)",[16,30169,30170,30171,30174],{},"Open the class library project file and change ",[30172,30173,9854],"silverlight-application",{},"\nto true (Unload the class library project and edit the csproj file)",[16,30176,30177,30178],{},"Add new element XapOutputs to project file below the element",[30172,30179,30180,30181],{}," i.e. add ",[30182,30183,15236],"xap-outputs",{},[16,30185,30186],{},"Now open Project Properties of the Silverlight Class library and change to the > Silverlight tab > Change the starter object",[16,30188,30189],{},"Change the following Project Property > Silverlight tab > Set the Xap file name",[16,30191,30192],{},"In the related web application add project property > Silverlight tab > Add your Silverlight application",[16,30194,30195],{},"You have not changed a Silverlight class library to an application project where the xap will be output and copied to the respective web site ClientBin directory.",{"title":1080,"searchDepth":1081,"depth":1081,"links":30197},[],"2015-04-20T08:07:13.8700000-04:00","Changing class library type to application.","\u002Farticles\u002Fimages\u002Fm8gdjJD1VK.png",{},"\u002Farticles\u002Fchange-silverlight-class-library-to-application",{"title":30162,"description":30199},"articles\u002Fchange-silverlight-class-library-to-application",[30206],"silverlight","u_COjDxXgW8q1CXFUEeyO_rqVp2EzKopDX8j3mKRw2Y",{"id":30209,"title":30210,"author":8,"body":30211,"createdAt":30282,"description":1915,"extension":1101,"img":30279,"meta":30283,"navigation":1104,"path":30284,"seo":30285,"stem":30286,"tags":30287,"updatedAt":30282,"__hash__":30288},"articles\u002Farticles\u002Felement-is-already-the-child-system-windows-markup-xamlparseexception-pivotcontrol-error.md","Element is already the child \u002F System.Windows.Markup.XamlParseException --> PivotControl Error",{"type":10,"value":30212,"toc":30280},[30213],[16,30214,30215,30216,14501,30218,30220,30221,14501,30223,30225,30226,30229,30230,30233,30235,30236,30238,30239,30241,30242,30244,30245,30247,30248,30250,30251,14501,30253,14501,30255,30257,30258,14501,30260,30262,30263,14501,30265,30267,30268,14501,30270,30272,30273,14501,30275,30277],{},"I have been working with Silverlight PivotViewer control and recently came across problem with the display of the control. \nI have a solution with multiple projects one of which is a Silverlight application.  Everything would compile without any error. \nWhen browsing to the form\u002Fpage with the control I would immediately get an exception on the InitializeComponent(); method within the Silverlight UserControl. \nThis method is called before loading any pivot cxml data.",[1118,30217],{},[1118,30219],{},"\nI have seen this component through odd errors or fail to load when there is javascript errors on the page or a failure of any ajax method. \nThe error that is thrown is as follows…",[1118,30222],{},[1118,30224],{},"\n{System.Windows.Markup.XamlParseException: Set property 'System.Windows.FrameworkElement.Style' threw an exception. ",[4215,30227,30228],{},"Line: 15 Position: 43"," ---> System.Windows.Markup.XamlParseException: Element is already the child of another element. ",[4215,30231,30232],{},"Line: 0 Position: 0",[1118,30234],{},"\n   at MS.Internal.XcpImports.CreateFromXaml(UnmanagedMemoryStream stream, String sourceAssemblyName, Boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers)",[1118,30237],{},"\n   at System.Windows.Controls.Control.GetBuiltInStyle(IntPtr nativeTarget, IntPtr& nativeStyle)",[1118,30240],{},"\n   --- End of inner exception stack trace ---",[1118,30243],{},"\n   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)",[1118,30246],{},"\n   at PivotView.Viewer.InitializeComponent()",[1118,30249],{},"\n   at PivotView.Viewer..ctor()}",[1118,30252],{},[1118,30254],{},[1118,30256],{},"\nIf searching Google you will see a number of posts on errors surrounding ‘XamlParseException’, ‘Styles’, ‘Element is already the child’ etc.  Without help from these posts, I finally came across the solution.  I found the error was the result of some missing references in the Silverlight project.  The components missing can be found in C:\\Program Files (x86)\\Microsoft SDKs\\Silverlight\\v4.0\\Toolkit\\Apr10\\Bin (which is installed as part of the most recent Silverlight Toolkit).  References to the following components was necessary.",[1118,30259],{},[1118,30261],{},"\nSystem.Windows.Controls.Layout.Toolkit.dll\nSystem.Windows.Controls.Toolkit.dll\nSystem.Windows.Controls.Toolkit.Internals.dll",[1118,30264],{},[1118,30266],{},"\nIf you're having issues, rename the xap file (adding .zip) and take a look to ensure those dlls are included.",[1118,30269],{},[1118,30271],{},"\nI thought I would post this information for others as well as a reminder to myself.  If you have any questions, let me know.",[1118,30274],{},[1118,30276],{},[156,30278],{"src":30279,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fpivotviewer.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":30281},[],"2015-04-20T08:07:13.7700000-04:00",{},"\u002Farticles\u002Felement-is-already-the-child-system-windows-markup-xamlparseexception-pivotcontrol-error",{"title":30210,"description":1915},"articles\u002Felement-is-already-the-child-system-windows-markup-xamlparseexception-pivotcontrol-error",[30206],"MwzE74POWqzTSnbetCRmaz5deTYzJG440Jb4tLUMo7w",{"id":30290,"title":30291,"author":8,"body":30292,"createdAt":30333,"description":30334,"extension":1101,"img":30330,"meta":30335,"navigation":1104,"path":30336,"seo":30337,"stem":30338,"tags":30339,"updatedAt":30333,"__hash__":30340},"articles\u002Farticles\u002Fnamespace-your-javascript.md","Namespace your JavaScript",{"type":10,"value":30293,"toc":30331},[30294,30302,30305,30308,30311,30328],[16,30295,30296,30297,14501,30299,30301],{},"There are a couple of ways to create namespaces for your code.  This format allows you to intentionally expose functions as public or keep them internal\u002Fprivate.  I like the following version…",[1118,30298],{},[1118,30300],{},"\nvar mynamespace = new function () {",[13,30303,30304],{},"  \nvar internalFunction = function() { \n     \u002F\u002FTODO: code \n};  \n",[13,30306,30307],{},"  \nthis.publicFunction = function() { \n    \u002F\u002FTODO: code \n};  \n",[19,30309,30310],{},"Simple, now why the heck do this?",[48,30312,30313,30316,30319,30322,30325],{},[51,30314,30315],{},"A namespace is a container and allows you to bundle up all your functionality using a unique name",[51,30317,30318],{},"In JavaScript a namespace is really just an object that you have attached all further methods, properties and objects",[51,30320,30321],{},"Without the usage of namespaces every function will be in the global (aka window) namespace (this occurs by default if you do not use a namespace).  It is a good practice not to clutter the global namespace",[51,30323,30324],{},"Using namespaces prevents the overwriting of existing function names",[51,30326,30327],{},"Using namespaces is one step in the direction of object-oriented which promotes modularity and code re-use",[156,30329],{"src":30330,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fns.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":30332},[],"2015-04-20T08:07:13.6900000-04:00","How to use namespaces within your JavaScript",{},"\u002Farticles\u002Fnamespace-your-javascript",{"title":30291,"description":30334},"articles\u002Fnamespace-your-javascript",[5166],"hpUwRZUyAy5HzKNcCB4a57Dnyk7v34btaAKN8B18S4o",{"id":30342,"title":30343,"author":8,"body":30344,"createdAt":30402,"description":30403,"extension":1101,"img":30397,"meta":30404,"navigation":1104,"path":30405,"seo":30406,"stem":30407,"tags":30408,"updatedAt":30402,"__hash__":30409},"articles\u002Farticles\u002Fjson-know-more.md","Json–know more",{"type":10,"value":30345,"toc":30398},[30346,30362,30366,30369,30373,30376,30380,30383,30395],[16,30347,30348,30349,30351,26432,30354,30356,30357,30359,30361],{},"{“People”:{",[1118,30350],{},[4215,30352,30353],{},"\n{“name”:”frank”, “age”:”21”},\n{“name”:”joe”,”age”:44”}\n",[1118,30355],{},"\n“Markeing”:",[4215,30358,30353],{},[1118,30360],{},"\n} }",[1150,30363,30365],{"id":30364},"squiggles-squares-colons-and-commas","Squiggles, Squares, Colons and Commas",[2652,30367,30368],{},"  \n* Squiggly brackets act as 'containers'   \n* Square brackets holds arrays   \n* Names and values are separated by a colon.   \n* Array elements are separated by commas  \n",[24,30370,30372],{"id":30371},"json-is-like-xml-because","\nJSON is like XML because:",[2652,30374,30375],{},"  \n* They are both 'self-describing' meaning that values are named, and thus 'human readable'   \n* Both are hierarchical. (i.e. You can have values within values.)   \n* Both can be parsed and used by lots of programming languages   \n* Both can be passed around using AJAX (i.e. httpWebRequest)  \n",[24,30377,30379],{"id":30378},"json-is-unlike-xml-because","JSON is UNlike XML because:",[2652,30381,30382],{},"  \n* XML uses angle brackets, with a tag name at the start and end of an element: JSON uses squiggly brackets with the name only at the beginning of the element.   \n* JSON is less verbose so it's definitely quicker for humans to write, and probably quicker for us to read.   \n* JSON can be parsed trivially using the eval() procedure in JavaScript   \n* JSON includes arrays {where each element doesn't have a name of its own}   \n* In XML you can use any name you want for an element, in JSON you can't use reserved words from javascript  \n",[16,30384,30385,30386,30389,30390,30394],{},"On the server-side you can easily serialize\u002Fdeserialize your objects to\u002Ffrom JSON. For ",[2239,30387,30388],{},".net"," programmers you can use libraries like ",[1139,30391,30393],{"href":30392},"http:\u002F\u002Fwww.newtonsoft.com\u002Fproducts\u002Fjson\u002F","Json.net"," to do this automatically for you (using reflection i assume), or you can generate your own custom code to perform it even faster on a case by case basis.",[156,30396],{"src":30397,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002FJSON.gif",{"title":1080,"searchDepth":1081,"depth":1081,"links":30399},[30400,30401],{"id":30371,"depth":1084,"text":30372},{"id":30378,"depth":1084,"text":30379},"2015-04-20T08:07:13.6000000-04:00","{“People”:{\n{“name”:”frank”, “age”:”21”},\n{“name”:”joe”,”age”:44”}\n,\n“Markeing”:\n{“name”:”frank”, “age”:”21”},\n{“name”:”joe”,”age”:44”}\n\n} }",{},"\u002Farticles\u002Fjson-know-more",{"title":30343,"description":30403},"articles\u002Fjson-know-more",[8994,5166],"OoXmULq_Ve1WX5OVc1z-FhmnTNctKTJ7RjuIMoBl31Q",{"id":30411,"title":30412,"author":8,"body":30413,"createdAt":30472,"description":1915,"extension":1101,"img":1915,"meta":30473,"navigation":1104,"path":30474,"seo":30475,"stem":30476,"tags":30477,"updatedAt":30472,"__hash__":30478},"articles\u002Farticles\u002Fdiagnosing-404-errors-on-iis-7-and-asp-net-mvc.md","Diagnosing 404 errors on IIS 7 and ASP.NET MVC",{"type":10,"value":30414,"toc":30470},[30415,30438,30443,30447,30452,30459,30466],[16,30416,30417,30418,29232,30421,30423,30424,30426,30427,30429,30430,11776,30432,30435,30436,11198],{},"Are you running in IIS7 ",[19,30419,30420],{},"integrated mode",[1118,30422],{},"\nClassic mode of IIS7 does ",[19,30425,29193],{}," automatically map extensionless URLs to ASP.NET (much like IIS6).",[1118,30428],{},"\nAlso make sure your ",[2239,30431,14397],{},[2239,30433,30434],{},"\u003Csystem.webServer>"," tag is configured correctly.",[1118,30437],{},[2232,30439,30440],{},[2239,30441,30442],{},"\u003Csystem.webServer>\n    \u003Cvalidation validateIntegratedModeConfiguration=\"false\"\u002F>\n    \u003Cmodules runAllManagedModulesForAllRequests=\"true\"\u002F>\n\u003C\u002Fsystem.webServer>",[2232,30444,30445,8422],{},[2239,30446],{},[2232,30448,30449],{},[2239,30450,30451],{},"On my workstation windows 7, 64 bit I had set my app pool to classic and \nadded a \"Wildcard Script Map\" \nto C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll (32bit dll). \nThe end result was my \nweb.confi webServer section looked like",[2232,30453,30454,30456],{},[2239,30455],{},[2239,30457,30458],{},"  \u003Csystem.webServer>\n    \u003Cvalidation validateIntegratedModeConfiguration=\"false\" \u002F>\n    \u003Cmodules runAllManagedModulesForAllRequests=\"true\" \u002F>\n        \u003Chandlers>\n            \u003Cadd name=\"_wildcard 32\" path=\"*\" verb=\"*\" modules=\"IsapiModule\" \n scriptProcessor=\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" \n resourceType=\"Unspecified\" requireAccess=\"None\" \n preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" \u002F>\n        \u003C\u002Fhandlers>\n  \u003C\u002Fsystem.webServer>\n\n\n",[2232,30460,30462],{"style":30461},"font-family: Consolas; background: white; color: black; font-size: 13px;",[4215,30463,30465],{"style":30464},"color: blue;","  \n",[2232,30467,30468,8422],{},[2239,30469],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":30471},[],"2015-04-20T08:07:13.5000000-04:00",{},"\u002Farticles\u002Fdiagnosing-404-errors-on-iis-7-and-asp-net-mvc",{"title":30412,"description":1915},"articles\u002Fdiagnosing-404-errors-on-iis-7-and-asp-net-mvc",[8994],"0t4kM0oaMXwUEwZbS3PO_145nI_leMJKlGcHa5tKNIQ",{"id":30480,"title":30481,"author":8,"body":30482,"createdAt":30555,"description":1915,"extension":1101,"img":1915,"meta":30556,"navigation":1104,"path":30557,"seo":30558,"stem":30559,"tags":30560,"updatedAt":30555,"__hash__":30561},"articles\u002Farticles\u002Fjavascript-shorthand-for-getelementbyid.md","Javascript Shorthand for getElementById",{"type":10,"value":30483,"toc":30553},[30484,30487,30547,30550],[16,30485,30486],{},"In the following sample I define a variable byId and set it to the function. You can use any valid variable name in place of byId",[2232,30488,30490],{"className":8240,"code":30489,"language":8242,"meta":1080,"style":1080},"var byId = function( id ) {   \nreturn document.getElementById( id );   \n};  \n  \nbyId( 'someID' )  \n  \n",[2239,30491,30492,30512,30525,30530,30534],{"__ignoreMap":1080},[4215,30493,30494,30496,30499,30501,30504,30507,30509],{"class":4217,"line":4218},[4215,30495,27363],{"class":8265},[4215,30497,30498],{"class":4666}," byId",[4215,30500,8266],{"class":8265},[4215,30502,30503],{"class":8265}," function",[4215,30505,30506],{"class":8259},"( ",[4215,30508,24018],{"class":22528},[4215,30510,30511],{"class":8259}," ) {   \n",[4215,30513,30514,30516,30519,30522],{"class":4217,"line":1081},[4215,30515,15052],{"class":8265},[4215,30517,30518],{"class":8259}," document.",[4215,30520,30521],{"class":4666},"getElementById",[4215,30523,30524],{"class":8259},"( id );   \n",[4215,30526,30527],{"class":4217,"line":1084},[4215,30528,30529],{"class":8259},"};  \n",[4215,30531,30532],{"class":4217,"line":4234},[4215,30533,10274],{"class":8259},[4215,30535,30536,30539,30541,30544],{"class":4217,"line":4240},[4215,30537,30538],{"class":4666},"byId",[4215,30540,30506],{"class":8259},[4215,30542,30543],{"class":4669},"'someID'",[4215,30545,30546],{"class":8259}," )\n",[16,30548,30549],{},"With jQuery simply $('#{id}) works as well.",[4682,30551,30552],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":30554},[],"2015-04-20T08:07:13.4100000-04:00",{},"\u002Farticles\u002Fjavascript-shorthand-for-getelementbyid",{"title":30481,"description":1915},"articles\u002Fjavascript-shorthand-for-getelementbyid",[5166],"qWKx_-0TTGaDOjOMubmF016hUxs-yFdRnxbL78wcEYQ",{"id":30563,"title":30564,"author":8,"body":30565,"createdAt":30654,"description":30655,"extension":1101,"img":30577,"meta":30656,"navigation":1104,"path":30657,"seo":30658,"stem":30659,"tags":30660,"updatedAt":30661,"__hash__":30662},"articles\u002Farticles\u002Fconvert-string-to-enum-c.md","Convert string to Enum c#",{"type":10,"value":30566,"toc":30652},[30567,30570,30573,30578,30612,30650],[16,30568,30569],{},"Converting a string to enum is quite easy one, but it needs some attention when converting from string to enum. I will try to explain you how you can convert from a string to enum type.  There is a method IsDefined",[16,30571,30572],{},"i.e. Enum.IsDefined(typeof(AddressType), type) however this comparison does not incorporate string CASE options hence you may get undesirable results.  It is best to use the CheckStringValueInEnum method below.",[16,30574,30575],{},[156,30576],{"alt":1080,"src":30577},"\u002Farticles\u002Fimages\u002Fcsharp.png",[2232,30579,30581],{"className":8721,"code":30580,"language":8723,"meta":1080,"style":1080},"AddressType addresssType;  \nif (Formatter.CheckStringValueInEnum(type, AddressType)) {  \n    addresssType = (AddressType)Enum.Parse(typeof(AddressType), type, true);  \n} else {  \n    addresssType = AddressType.NA;  \n}  \n",[2239,30582,30583,30588,30593,30598,30603,30608],{"__ignoreMap":1080},[4215,30584,30585],{"class":4217,"line":4218},[4215,30586,30587],{},"AddressType addresssType;  \n",[4215,30589,30590],{"class":4217,"line":1081},[4215,30591,30592],{},"if (Formatter.CheckStringValueInEnum(type, AddressType)) {  \n",[4215,30594,30595],{"class":4217,"line":1084},[4215,30596,30597],{},"    addresssType = (AddressType)Enum.Parse(typeof(AddressType), type, true);  \n",[4215,30599,30600],{"class":4217,"line":4234},[4215,30601,30602],{},"} else {  \n",[4215,30604,30605],{"class":4217,"line":4240},[4215,30606,30607],{},"    addresssType = AddressType.NA;  \n",[4215,30609,30610],{"class":4217,"line":4246},[4215,30611,9887],{},[2232,30613,30615],{"className":8721,"code":30614,"language":8723,"meta":1080,"style":1080},"\u002F\u002Fused to check existence of string in enum  \npublic static bool CheckStringValueInEnum(string stringValue, Enum e) {  \n    foreach (string enumString in Enum.GetNames(e.GetType()))  \n        if (string.Compare(enumString, stringValue, true) == 0)  \n            return true;  \n    return false;  \n}\n",[2239,30616,30617,30622,30627,30632,30637,30641,30646],{"__ignoreMap":1080},[4215,30618,30619],{"class":4217,"line":4218},[4215,30620,30621],{},"\u002F\u002Fused to check existence of string in enum  \n",[4215,30623,30624],{"class":4217,"line":1081},[4215,30625,30626],{},"public static bool CheckStringValueInEnum(string stringValue, Enum e) {  \n",[4215,30628,30629],{"class":4217,"line":1084},[4215,30630,30631],{},"    foreach (string enumString in Enum.GetNames(e.GetType()))  \n",[4215,30633,30634],{"class":4217,"line":4234},[4215,30635,30636],{},"        if (string.Compare(enumString, stringValue, true) == 0)  \n",[4215,30638,30639],{"class":4217,"line":4240},[4215,30640,17841],{},[4215,30642,30643],{"class":4217,"line":4246},[4215,30644,30645],{},"    return false;  \n",[4215,30647,30648],{"class":4217,"line":4252},[4215,30649,9887],{},[4682,30651,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":30653},[],"2015-04-20T08:07:13.3200000-04:00","Converting a string to enum is quite easy one, but it needs some attention when converting from string to enum",{},"\u002Farticles\u002Fconvert-string-to-enum-c",{"title":30564,"description":30655},"articles\u002Fconvert-string-to-enum-c",[8994],"22015-04-20T08:07:13.3200000-04:00","Xe5Wh1yBT7-7lRS-myPAxDtvsAnlNrkctt8CYz72Gbk",{"id":30664,"title":30665,"author":8,"body":30666,"createdAt":31716,"description":1915,"extension":1101,"img":31717,"meta":31718,"navigation":1104,"path":31719,"seo":31720,"stem":31721,"tags":31722,"updatedAt":31716,"__hash__":31723},"articles\u002Farticles\u002Fcss-reset-class-standardizes-browsers.md","CSS Reset Class–Standardizes Browsers",{"type":10,"value":30667,"toc":31714},[30668,30671,31705,31708,31711],[16,30669,30670],{},"You might think that such a tiny piece of HTML would display exactly the same way in all web browsers. Firefox, Internet Explorer, Chrome and Opera all have their default implementations of css. The following reset class can be used in your pages to bring them all down to a common base.",[2232,30672,30676],{"className":30673,"code":30674,"language":30675,"meta":1080,"style":1080},"language-css shiki shiki-themes github-light github-dark",".reset a,          .reset abbr,     .reset  acronym,  \n.reset address,    .reset applet,   .reset  big,  \n.reset blockquote, .reset body,     .reset  caption,  \n.reset cite,       .reset code,     .reset  dd,  \n.reset del,        .reset dl,       .reset  dfn,  \n.reset div,        .reset dt,       .reset  em,  \n.reset fieldset,   .reset font,     .reset form,  \n.reset h1,         .reset h2,       .reset  h3,  \n.reset h4,         .reset h5,       .reset  h6,  \n.reset html,       .reset iframe,   .reset  img,  \n.reset ins,        .reset kbd,      .reset  label,  \n.reset legend,     .reset li,       .reset  object,  \n.reset ol,         .reset p,        .reset  pre,  \n.reset span,       .reset q,        .reset s,  \n.reset samp,       .reset small,    .reset  strike,  \n.reset strong,     .reset sub,      .reset  sup,  \n.reset table,      .reset tbody,    .reset  td,  \n.reset tfoot,      .reset th,       .reset  thead,  \n.reset tr,         .reset tt,       .reset  ul,  \n.reset var {  \n   margin         :0;  \n   padding        :0;  \n   border         :0;  \n   outline        :0;  \n   font-family    :inherit;  \n   font-style     :inherit;  \n   font-weight    :inherit;  \n   font-size      :100%;  \n   vertical-align :baseline;  \n}  \n.reset address,     .reset ar,       .reset  caption,  \n.reset cite,        .reset code,     .reset  dfn,  \n.reset em,          .reset strong,   .reset  th,  \n.reset v {  \n   font-style     :normal;  \n   font-weight    :normal;  \n}  \n.reset h1,          .reset h2,       .reset  h3,  \n.reset h4,          .reset h5,       .reset  h6 {  \n   font-weight    :normal;  \n   font-size      :100%;  \n}  \n.reset blockquote:after, .reset  blockquote:before,  \n.reset q:after,          .reset q:before {  \n   content        :'';  \n}  \n.reset caption,     .reset th,       .reset  td {  \n   font-weight    :normal;  \n   text-align     :left;  \n}  \n.reset              .reset fieldset, .reset img {  \n   border         :0;  \n}  \n.reset abbr,        .reset acronym {  \n   border         :0;  \n}  \n.reset ol,          .reset ul {  \n   list-style     :none;  \n}  \n.reset body {  \n   line-height    :1;  \n   background     :#ffffff;  \n   color          :#000000;  \n}  \n.reset  table {  \n   border-collapse:separate;  \n   border-spacing :0;  \n}  \n.reset:focus {  \n   outline        :0;  \n}  \n  \n","css",[2239,30677,30678,30704,30729,30752,30776,30800,30823,30846,30870,30893,30915,30939,30962,30985,31008,31031,31054,31077,31100,31123,31132,31145,31157,31168,31179,31192,31204,31215,31231,31244,31248,31267,31287,31309,31316,31327,31337,31341,31361,31381,31391,31403,31407,31428,31446,31457,31461,31482,31492,31503,31507,31525,31535,31539,31554,31564,31568,31583,31595,31599,31607,31619,31631,31644,31648,31657,31669,31680,31684,31691,31701],{"__ignoreMap":1080},[4215,30679,30680,30683,30686,30689,30691,30694,30697,30699,30702],{"class":4217,"line":4218},[4215,30681,30682],{"class":4666},".reset",[4215,30684,30685],{"class":8800}," a",[4215,30687,30688],{"class":8259},",          ",[4215,30690,30682],{"class":4666},[4215,30692,30693],{"class":8800}," abbr",[4215,30695,30696],{"class":8259},",     ",[4215,30698,30682],{"class":4666},[4215,30700,30701],{"class":8800},"  acronym",[4215,30703,22495],{"class":8259},[4215,30705,30706,30708,30711,30714,30716,30719,30722,30724,30727],{"class":4217,"line":1081},[4215,30707,30682],{"class":4666},[4215,30709,30710],{"class":8800}," address",[4215,30712,30713],{"class":8259},",    ",[4215,30715,30682],{"class":4666},[4215,30717,30718],{"class":8800}," applet",[4215,30720,30721],{"class":8259},",   ",[4215,30723,30682],{"class":4666},[4215,30725,30726],{"class":8800},"  big",[4215,30728,22495],{"class":8259},[4215,30730,30731,30733,30736,30738,30740,30743,30745,30747,30750],{"class":4217,"line":1084},[4215,30732,30682],{"class":4666},[4215,30734,30735],{"class":8800}," blockquote",[4215,30737,3091],{"class":8259},[4215,30739,30682],{"class":4666},[4215,30741,30742],{"class":8800}," body",[4215,30744,30696],{"class":8259},[4215,30746,30682],{"class":4666},[4215,30748,30749],{"class":8800},"  caption",[4215,30751,22495],{"class":8259},[4215,30753,30754,30756,30759,30762,30764,30767,30769,30771,30774],{"class":4217,"line":4234},[4215,30755,30682],{"class":4666},[4215,30757,30758],{"class":8800}," cite",[4215,30760,30761],{"class":8259},",       ",[4215,30763,30682],{"class":4666},[4215,30765,30766],{"class":8800}," code",[4215,30768,30696],{"class":8259},[4215,30770,30682],{"class":4666},[4215,30772,30773],{"class":8800},"  dd",[4215,30775,22495],{"class":8259},[4215,30777,30778,30780,30783,30786,30788,30791,30793,30795,30798],{"class":4217,"line":4240},[4215,30779,30682],{"class":4666},[4215,30781,30782],{"class":8800}," del",[4215,30784,30785],{"class":8259},",        ",[4215,30787,30682],{"class":4666},[4215,30789,30790],{"class":8800}," dl",[4215,30792,30761],{"class":8259},[4215,30794,30682],{"class":4666},[4215,30796,30797],{"class":8800},"  dfn",[4215,30799,22495],{"class":8259},[4215,30801,30802,30804,30807,30809,30811,30814,30816,30818,30821],{"class":4217,"line":4246},[4215,30803,30682],{"class":4666},[4215,30805,30806],{"class":8800}," div",[4215,30808,30785],{"class":8259},[4215,30810,30682],{"class":4666},[4215,30812,30813],{"class":8800}," dt",[4215,30815,30761],{"class":8259},[4215,30817,30682],{"class":4666},[4215,30819,30820],{"class":8800},"  em",[4215,30822,22495],{"class":8259},[4215,30824,30825,30827,30830,30832,30834,30837,30839,30841,30844],{"class":4217,"line":4252},[4215,30826,30682],{"class":4666},[4215,30828,30829],{"class":8800}," fieldset",[4215,30831,30721],{"class":8259},[4215,30833,30682],{"class":4666},[4215,30835,30836],{"class":8800}," font",[4215,30838,30696],{"class":8259},[4215,30840,30682],{"class":4666},[4215,30842,30843],{"class":8800}," form",[4215,30845,22495],{"class":8259},[4215,30847,30848,30850,30853,30856,30858,30861,30863,30865,30868],{"class":4217,"line":4258},[4215,30849,30682],{"class":4666},[4215,30851,30852],{"class":8800}," h1",[4215,30854,30855],{"class":8259},",         ",[4215,30857,30682],{"class":4666},[4215,30859,30860],{"class":8800}," h2",[4215,30862,30761],{"class":8259},[4215,30864,30682],{"class":4666},[4215,30866,30867],{"class":8800},"  h3",[4215,30869,22495],{"class":8259},[4215,30871,30872,30874,30877,30879,30881,30884,30886,30888,30891],{"class":4217,"line":4264},[4215,30873,30682],{"class":4666},[4215,30875,30876],{"class":8800}," h4",[4215,30878,30855],{"class":8259},[4215,30880,30682],{"class":4666},[4215,30882,30883],{"class":8800}," h5",[4215,30885,30761],{"class":8259},[4215,30887,30682],{"class":4666},[4215,30889,30890],{"class":8800},"  h6",[4215,30892,22495],{"class":8259},[4215,30894,30895,30897,30899,30901,30903,30906,30908,30910,30913],{"class":4217,"line":4270},[4215,30896,30682],{"class":4666},[4215,30898,9352],{"class":8800},[4215,30900,30761],{"class":8259},[4215,30902,30682],{"class":4666},[4215,30904,30905],{"class":8800}," iframe",[4215,30907,30721],{"class":8259},[4215,30909,30682],{"class":4666},[4215,30911,30912],{"class":8800},"  img",[4215,30914,22495],{"class":8259},[4215,30916,30917,30919,30922,30924,30926,30929,30932,30934,30937],{"class":4217,"line":4276},[4215,30918,30682],{"class":4666},[4215,30920,30921],{"class":8800}," ins",[4215,30923,30785],{"class":8259},[4215,30925,30682],{"class":4666},[4215,30927,30928],{"class":8800}," kbd",[4215,30930,30931],{"class":8259},",      ",[4215,30933,30682],{"class":4666},[4215,30935,30936],{"class":8800},"  label",[4215,30938,22495],{"class":8259},[4215,30940,30941,30943,30946,30948,30950,30953,30955,30957,30960],{"class":4217,"line":4282},[4215,30942,30682],{"class":4666},[4215,30944,30945],{"class":8800}," legend",[4215,30947,30696],{"class":8259},[4215,30949,30682],{"class":4666},[4215,30951,30952],{"class":8800}," li",[4215,30954,30761],{"class":8259},[4215,30956,30682],{"class":4666},[4215,30958,30959],{"class":8800},"  object",[4215,30961,22495],{"class":8259},[4215,30963,30964,30966,30969,30971,30973,30976,30978,30980,30983],{"class":4217,"line":4288},[4215,30965,30682],{"class":4666},[4215,30967,30968],{"class":8800}," ol",[4215,30970,30855],{"class":8259},[4215,30972,30682],{"class":4666},[4215,30974,30975],{"class":8800}," p",[4215,30977,30785],{"class":8259},[4215,30979,30682],{"class":4666},[4215,30981,30982],{"class":8800},"  pre",[4215,30984,22495],{"class":8259},[4215,30986,30987,30989,30992,30994,30996,30999,31001,31003,31006],{"class":4217,"line":4294},[4215,30988,30682],{"class":4666},[4215,30990,30991],{"class":8800}," span",[4215,30993,30761],{"class":8259},[4215,30995,30682],{"class":4666},[4215,30997,30998],{"class":8800}," q",[4215,31000,30785],{"class":8259},[4215,31002,30682],{"class":4666},[4215,31004,31005],{"class":8800}," s",[4215,31007,22495],{"class":8259},[4215,31009,31010,31012,31015,31017,31019,31022,31024,31026,31029],{"class":4217,"line":4300},[4215,31011,30682],{"class":4666},[4215,31013,31014],{"class":8800}," samp",[4215,31016,30761],{"class":8259},[4215,31018,30682],{"class":4666},[4215,31020,31021],{"class":8800}," small",[4215,31023,30713],{"class":8259},[4215,31025,30682],{"class":4666},[4215,31027,31028],{"class":8800},"  strike",[4215,31030,22495],{"class":8259},[4215,31032,31033,31035,31038,31040,31042,31045,31047,31049,31052],{"class":4217,"line":4306},[4215,31034,30682],{"class":4666},[4215,31036,31037],{"class":8800}," strong",[4215,31039,30696],{"class":8259},[4215,31041,30682],{"class":4666},[4215,31043,31044],{"class":8800}," sub",[4215,31046,30931],{"class":8259},[4215,31048,30682],{"class":4666},[4215,31050,31051],{"class":8800},"  sup",[4215,31053,22495],{"class":8259},[4215,31055,31056,31058,31061,31063,31065,31068,31070,31072,31075],{"class":4217,"line":4312},[4215,31057,30682],{"class":4666},[4215,31059,31060],{"class":8800}," table",[4215,31062,30931],{"class":8259},[4215,31064,30682],{"class":4666},[4215,31066,31067],{"class":8800}," tbody",[4215,31069,30713],{"class":8259},[4215,31071,30682],{"class":4666},[4215,31073,31074],{"class":8800},"  td",[4215,31076,22495],{"class":8259},[4215,31078,31079,31081,31084,31086,31088,31091,31093,31095,31098],{"class":4217,"line":4318},[4215,31080,30682],{"class":4666},[4215,31082,31083],{"class":8800}," tfoot",[4215,31085,30931],{"class":8259},[4215,31087,30682],{"class":4666},[4215,31089,31090],{"class":8800}," th",[4215,31092,30761],{"class":8259},[4215,31094,30682],{"class":4666},[4215,31096,31097],{"class":8800},"  thead",[4215,31099,22495],{"class":8259},[4215,31101,31102,31104,31107,31109,31111,31114,31116,31118,31121],{"class":4217,"line":4324},[4215,31103,30682],{"class":4666},[4215,31105,31106],{"class":8800}," tr",[4215,31108,30855],{"class":8259},[4215,31110,30682],{"class":4666},[4215,31112,31113],{"class":8800}," tt",[4215,31115,30761],{"class":8259},[4215,31117,30682],{"class":4666},[4215,31119,31120],{"class":8800},"  ul",[4215,31122,22495],{"class":8259},[4215,31124,31125,31127,31130],{"class":4217,"line":4330},[4215,31126,30682],{"class":4666},[4215,31128,31129],{"class":8800}," var",[4215,31131,22720],{"class":8259},[4215,31133,31134,31137,31140,31142],{"class":4217,"line":4336},[4215,31135,31136],{"class":8255},"   margin",[4215,31138,31139],{"class":8259},"         :",[4215,31141,13084],{"class":8255},[4215,31143,31144],{"class":8259},";  \n",[4215,31146,31147,31150,31153,31155],{"class":4217,"line":4342},[4215,31148,31149],{"class":8255},"   padding",[4215,31151,31152],{"class":8259},"        :",[4215,31154,13084],{"class":8255},[4215,31156,31144],{"class":8259},[4215,31158,31159,31162,31164,31166],{"class":4217,"line":4348},[4215,31160,31161],{"class":8255},"   border",[4215,31163,31139],{"class":8259},[4215,31165,13084],{"class":8255},[4215,31167,31144],{"class":8259},[4215,31169,31170,31173,31175,31177],{"class":4217,"line":4353},[4215,31171,31172],{"class":8255},"   outline",[4215,31174,31152],{"class":8259},[4215,31176,13084],{"class":8255},[4215,31178,31144],{"class":8259},[4215,31180,31181,31184,31187,31190],{"class":4217,"line":4359},[4215,31182,31183],{"class":8255},"   font-family",[4215,31185,31186],{"class":8259},"    :",[4215,31188,31189],{"class":8255},"inherit",[4215,31191,31144],{"class":8259},[4215,31193,31194,31197,31200,31202],{"class":4217,"line":4365},[4215,31195,31196],{"class":8255},"   font-style",[4215,31198,31199],{"class":8259},"     :",[4215,31201,31189],{"class":8255},[4215,31203,31144],{"class":8259},[4215,31205,31206,31209,31211,31213],{"class":4217,"line":4371},[4215,31207,31208],{"class":8255},"   font-weight",[4215,31210,31186],{"class":8259},[4215,31212,31189],{"class":8255},[4215,31214,31144],{"class":8259},[4215,31216,31217,31220,31223,31226,31229],{"class":4217,"line":4377},[4215,31218,31219],{"class":8255},"   font-size",[4215,31221,31222],{"class":8259},"      :",[4215,31224,31225],{"class":8255},"100",[4215,31227,31228],{"class":8265},"%",[4215,31230,31144],{"class":8259},[4215,31232,31233,31236,31239,31242],{"class":4217,"line":4383},[4215,31234,31235],{"class":8255},"   vertical-align",[4215,31237,31238],{"class":8259}," :",[4215,31240,31241],{"class":8255},"baseline",[4215,31243,31144],{"class":8259},[4215,31245,31246],{"class":4217,"line":4389},[4215,31247,17676],{"class":8259},[4215,31249,31250,31252,31254,31256,31258,31261,31263,31265],{"class":4217,"line":4395},[4215,31251,30682],{"class":4666},[4215,31253,30710],{"class":8800},[4215,31255,30696],{"class":8259},[4215,31257,30682],{"class":4666},[4215,31259,31260],{"class":8259}," ar,       ",[4215,31262,30682],{"class":4666},[4215,31264,30749],{"class":8800},[4215,31266,22495],{"class":8259},[4215,31268,31269,31271,31273,31275,31277,31279,31281,31283,31285],{"class":4217,"line":4401},[4215,31270,30682],{"class":4666},[4215,31272,30758],{"class":8800},[4215,31274,30785],{"class":8259},[4215,31276,30682],{"class":4666},[4215,31278,30766],{"class":8800},[4215,31280,30696],{"class":8259},[4215,31282,30682],{"class":4666},[4215,31284,30797],{"class":8800},[4215,31286,22495],{"class":8259},[4215,31288,31289,31291,31294,31296,31298,31300,31302,31304,31307],{"class":4217,"line":4406},[4215,31290,30682],{"class":4666},[4215,31292,31293],{"class":8800}," em",[4215,31295,30688],{"class":8259},[4215,31297,30682],{"class":4666},[4215,31299,31037],{"class":8800},[4215,31301,30721],{"class":8259},[4215,31303,30682],{"class":4666},[4215,31305,31306],{"class":8800},"  th",[4215,31308,22495],{"class":8259},[4215,31310,31311,31313],{"class":4217,"line":4412},[4215,31312,30682],{"class":4666},[4215,31314,31315],{"class":8259}," v {  \n",[4215,31317,31318,31320,31322,31325],{"class":4217,"line":4418},[4215,31319,31196],{"class":8255},[4215,31321,31199],{"class":8259},[4215,31323,31324],{"class":8255},"normal",[4215,31326,31144],{"class":8259},[4215,31328,31329,31331,31333,31335],{"class":4217,"line":4423},[4215,31330,31208],{"class":8255},[4215,31332,31186],{"class":8259},[4215,31334,31324],{"class":8255},[4215,31336,31144],{"class":8259},[4215,31338,31339],{"class":4217,"line":4429},[4215,31340,17676],{"class":8259},[4215,31342,31343,31345,31347,31349,31351,31353,31355,31357,31359],{"class":4217,"line":4435},[4215,31344,30682],{"class":4666},[4215,31346,30852],{"class":8800},[4215,31348,30688],{"class":8259},[4215,31350,30682],{"class":4666},[4215,31352,30860],{"class":8800},[4215,31354,30761],{"class":8259},[4215,31356,30682],{"class":4666},[4215,31358,30867],{"class":8800},[4215,31360,22495],{"class":8259},[4215,31362,31363,31365,31367,31369,31371,31373,31375,31377,31379],{"class":4217,"line":4440},[4215,31364,30682],{"class":4666},[4215,31366,30876],{"class":8800},[4215,31368,30688],{"class":8259},[4215,31370,30682],{"class":4666},[4215,31372,30883],{"class":8800},[4215,31374,30761],{"class":8259},[4215,31376,30682],{"class":4666},[4215,31378,30890],{"class":8800},[4215,31380,22720],{"class":8259},[4215,31382,31383,31385,31387,31389],{"class":4217,"line":4446},[4215,31384,31208],{"class":8255},[4215,31386,31186],{"class":8259},[4215,31388,31324],{"class":8255},[4215,31390,31144],{"class":8259},[4215,31392,31393,31395,31397,31399,31401],{"class":4217,"line":4452},[4215,31394,31219],{"class":8255},[4215,31396,31222],{"class":8259},[4215,31398,31225],{"class":8255},[4215,31400,31228],{"class":8265},[4215,31402,31144],{"class":8259},[4215,31404,31405],{"class":4217,"line":4458},[4215,31406,17676],{"class":8259},[4215,31408,31409,31411,31413,31416,31418,31420,31423,31426],{"class":4217,"line":4464},[4215,31410,30682],{"class":4666},[4215,31412,30735],{"class":8800},[4215,31414,31415],{"class":4666},":after",[4215,31417,3091],{"class":8259},[4215,31419,30682],{"class":4666},[4215,31421,31422],{"class":8800},"  blockquote",[4215,31424,31425],{"class":4666},":before",[4215,31427,22495],{"class":8259},[4215,31429,31430,31432,31434,31436,31438,31440,31442,31444],{"class":4217,"line":4469},[4215,31431,30682],{"class":4666},[4215,31433,30998],{"class":8800},[4215,31435,31415],{"class":4666},[4215,31437,30688],{"class":8259},[4215,31439,30682],{"class":4666},[4215,31441,30998],{"class":8800},[4215,31443,31425],{"class":4666},[4215,31445,22720],{"class":8259},[4215,31447,31448,31451,31453,31455],{"class":4217,"line":4475},[4215,31449,31450],{"class":8255},"   content",[4215,31452,31152],{"class":8259},[4215,31454,22687],{"class":4669},[4215,31456,31144],{"class":8259},[4215,31458,31459],{"class":4217,"line":4481},[4215,31460,17676],{"class":8259},[4215,31462,31463,31465,31468,31470,31472,31474,31476,31478,31480],{"class":4217,"line":4487},[4215,31464,30682],{"class":4666},[4215,31466,31467],{"class":8800}," caption",[4215,31469,30696],{"class":8259},[4215,31471,30682],{"class":4666},[4215,31473,31090],{"class":8800},[4215,31475,30761],{"class":8259},[4215,31477,30682],{"class":4666},[4215,31479,31074],{"class":8800},[4215,31481,22720],{"class":8259},[4215,31483,31484,31486,31488,31490],{"class":4217,"line":4492},[4215,31485,31208],{"class":8255},[4215,31487,31186],{"class":8259},[4215,31489,31324],{"class":8255},[4215,31491,31144],{"class":8259},[4215,31493,31494,31497,31499,31501],{"class":4217,"line":4498},[4215,31495,31496],{"class":8255},"   text-align",[4215,31498,31199],{"class":8259},[4215,31500,27196],{"class":8255},[4215,31502,31144],{"class":8259},[4215,31504,31505],{"class":4217,"line":4504},[4215,31506,17676],{"class":8259},[4215,31508,31509,31511,31514,31516,31518,31520,31523],{"class":4217,"line":4510},[4215,31510,30682],{"class":4666},[4215,31512,31513],{"class":4666},"              .reset",[4215,31515,30829],{"class":8800},[4215,31517,3091],{"class":8259},[4215,31519,30682],{"class":4666},[4215,31521,31522],{"class":8800}," img",[4215,31524,22720],{"class":8259},[4215,31526,31527,31529,31531,31533],{"class":4217,"line":4516},[4215,31528,31161],{"class":8255},[4215,31530,31139],{"class":8259},[4215,31532,13084],{"class":8255},[4215,31534,31144],{"class":8259},[4215,31536,31537],{"class":4217,"line":4521},[4215,31538,17676],{"class":8259},[4215,31540,31541,31543,31545,31547,31549,31552],{"class":4217,"line":18049},[4215,31542,30682],{"class":4666},[4215,31544,30693],{"class":8800},[4215,31546,30785],{"class":8259},[4215,31548,30682],{"class":4666},[4215,31550,31551],{"class":8800}," acronym",[4215,31553,22720],{"class":8259},[4215,31555,31556,31558,31560,31562],{"class":4217,"line":18054},[4215,31557,31161],{"class":8255},[4215,31559,31139],{"class":8259},[4215,31561,13084],{"class":8255},[4215,31563,31144],{"class":8259},[4215,31565,31566],{"class":4217,"line":29024},[4215,31567,17676],{"class":8259},[4215,31569,31570,31572,31574,31576,31578,31581],{"class":4217,"line":29029},[4215,31571,30682],{"class":4666},[4215,31573,30968],{"class":8800},[4215,31575,30688],{"class":8259},[4215,31577,30682],{"class":4666},[4215,31579,31580],{"class":8800}," ul",[4215,31582,22720],{"class":8259},[4215,31584,31585,31588,31590,31593],{"class":4217,"line":29034},[4215,31586,31587],{"class":8255},"   list-style",[4215,31589,31199],{"class":8259},[4215,31591,31592],{"class":8255},"none",[4215,31594,31144],{"class":8259},[4215,31596,31597],{"class":4217,"line":29039},[4215,31598,17676],{"class":8259},[4215,31600,31601,31603,31605],{"class":4217,"line":29045},[4215,31602,30682],{"class":4666},[4215,31604,30742],{"class":8800},[4215,31606,22720],{"class":8259},[4215,31608,31609,31612,31614,31617],{"class":4217,"line":29050},[4215,31610,31611],{"class":8255},"   line-height",[4215,31613,31186],{"class":8259},[4215,31615,31616],{"class":8255},"1",[4215,31618,31144],{"class":8259},[4215,31620,31621,31624,31626,31629],{"class":4217,"line":12398},[4215,31622,31623],{"class":8255},"   background",[4215,31625,31199],{"class":8259},[4215,31627,31628],{"class":8255},"#ffffff",[4215,31630,31144],{"class":8259},[4215,31632,31633,31636,31639,31642],{"class":4217,"line":29060},[4215,31634,31635],{"class":8255},"   color",[4215,31637,31638],{"class":8259},"          :",[4215,31640,31641],{"class":8255},"#000000",[4215,31643,31144],{"class":8259},[4215,31645,31646],{"class":4217,"line":29066},[4215,31647,17676],{"class":8259},[4215,31649,31650,31652,31655],{"class":4217,"line":17029},[4215,31651,30682],{"class":4666},[4215,31653,31654],{"class":8800},"  table",[4215,31656,22720],{"class":8259},[4215,31658,31659,31662,31664,31667],{"class":4217,"line":29075},[4215,31660,31661],{"class":8255},"   border-collapse",[4215,31663,8874],{"class":8259},[4215,31665,31666],{"class":8255},"separate",[4215,31668,31144],{"class":8259},[4215,31670,31671,31674,31676,31678],{"class":4217,"line":29080},[4215,31672,31673],{"class":8255},"   border-spacing",[4215,31675,31238],{"class":8259},[4215,31677,13084],{"class":8255},[4215,31679,31144],{"class":8259},[4215,31681,31682],{"class":4217,"line":29086},[4215,31683,17676],{"class":8259},[4215,31685,31686,31689],{"class":4217,"line":29092},[4215,31687,31688],{"class":4666},".reset:focus",[4215,31690,22720],{"class":8259},[4215,31692,31693,31695,31697,31699],{"class":4217,"line":29097},[4215,31694,31172],{"class":8255},[4215,31696,31152],{"class":8259},[4215,31698,13084],{"class":8255},[4215,31700,31144],{"class":8259},[4215,31702,31703],{"class":4217,"line":29102},[4215,31704,9887],{"class":8259},[16,31706,31707],{},"The above css class ‘reset’ can be used to clear all formatting within a block of html or as is often the case can be applied within the html tag i.e. \u003Chtml class=”reset”>\u003C\u002Fhtml>",[16,31709,31710],{},"Once you do this, your whole web page will lose almost all its styling, ready for you to provide the styles you need.",[4682,31712,31713],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":1080,"searchDepth":1081,"depth":1081,"links":31715},[],"2015-04-20T08:07:13.2200000-04:00","\u002Farticles\u002Fimages\u002Fcss-grey.png",{},"\u002Farticles\u002Fcss-reset-class-standardizes-browsers",{"title":30665,"description":1915},"articles\u002Fcss-reset-class-standardizes-browsers",[30675],"XB5JiJn-0ts0qNIk67Pd97EO0vAtlJdp_Mz3FUD-7eI",{"id":31725,"title":31726,"author":8,"body":31727,"createdAt":31755,"description":31756,"extension":1101,"img":31757,"meta":31758,"navigation":1104,"path":31759,"seo":31760,"stem":31761,"tags":31762,"updatedAt":31755,"__hash__":31763},"articles\u002Farticles\u002Fiis-6-mvc-css-troubles-styles-not-recognized.md","IIS 6 MVC CSS Troubles - Styles not recognized",{"type":10,"value":31728,"toc":31753},[31729,31732,31735,31738,31741,31744,31747,31750],[16,31730,31731],{},"Scenario: I deployed my mvc 3 application to IIS 6 (with NTLM authentication). While using Internet Explorer (IE) everything looked great. When I tested the site with other common browsers Chrome\u002FFireFox\u002FSafari none of the styles specified in the css sheet were used.",[16,31733,31734],{},"I first checked with FireFox\u002FFirebug that the css was indeed found. The css sheet was found and returned to the client. I tried to view the css sheet within Firebug and I got the message \"There are no rules. You can create a rule.\"....so the css is found however for some reason it is not being applied in non-Internet Explorer browsers.",[16,31736,31737],{},"The css is reference via the _layout.cshtml as shown...(my first attempts were to modify the path to the css sheet even though I could see the css was accessible to the browser)",[16,31739,31740],{},"I.e. \u003Clink href=\"@Url.Content(\"~\u002FContent\u002FSite.css\")\" rel=\"stylesheet\" type=\"text\u002Fcss\" \u002F>",[16,31742,31743],{},"Next attempts used a couple different online css validation apps to ensure my css syntax was not causing an issue. All checked out ok.",[16,31745,31746],{},"After making a number of minor attempts at digging out additional clues…I checked the IIS 6 setup (everything worked fine locally with IIS 7, so I was narrowing my focus on IIS as being the problem).",[16,31748,31749],{},"Solution: The site is hosted on a Microsoft IIS 6 server, and it was not sending the appropriate MIME type for CSS files. The fix to this problem was to add a custom MIME type associating .CSS files with the type \"text\u002Fcss\". Obviously, IE was able to discern that the downloaded text file was to be used as a style sheet. Interestingly the other browsers did not have that default behavior and relies on the web server to identify the file of type text\u002Fcss.",[16,31751,31752],{},"To resolve, open IIS console, navigate to the root application and add MIME Type text\u002Fcss for documents with the extension .css",{"title":1080,"searchDepth":1081,"depth":1081,"links":31754},[],"2015-04-20T08:07:13.1100000-04:00","I deployed my mvc 3 application to IIS 6 (with NTLM authentication)....","\u002Farticles\u002Fimages\u002Fmvc.gif",{},"\u002Farticles\u002Fiis-6-mvc-css-troubles-styles-not-recognized",{"title":31726,"description":31756},"articles\u002Fiis-6-mvc-css-troubles-styles-not-recognized",[8994],"95HhQr_7ApUk2zLKgWpOWgYJyUurRpPpjhvJ3sAnT18",{"id":31765,"title":31766,"author":8,"body":31767,"createdAt":31819,"description":31820,"extension":1101,"img":31816,"meta":31821,"navigation":1104,"path":31822,"seo":31823,"stem":31824,"tags":31825,"updatedAt":31819,"__hash__":31826},"articles\u002Farticles\u002Ffont-sizes-comparison-em-vs-px-vs-pt-vs-percent.md","Font Sizes–Comparison EM vs PX vs PT vs Percent",{"type":10,"value":31768,"toc":31817},[31769,31775],[16,31770,31771,31772,31774],{},"In CSS, you're given four different units by which you can measure the size of text as it’s displayed in the web browser.  Which of these four units is best suited for the web?",[1118,31773],{},"\nWhat do we have…",[16,31776,31777,31778,14501,31780,31782,31783,14501,31785,31787,31788,14501,31790,31792,31793,14501,31795,31797,31798,14501,31800,31802,31803,14501,31805,31807,31808,14501,31810,14501,31812,31814],{},"“Ems” (em): The “em” is a scalable unit that is used in web document media. An em is equal to the current font-size, for instance, if the font-size of the document is 12pt, 1em is equal to 12pt. Ems are scalable in nature, so 2em would equal 24pt, .5em would equal 6pt, etc. Ems are becoming increasingly popular in web documents due to scalability and their mobile-device-friendly nature.",[1118,31779],{},[1118,31781],{},"\nPixels (px): Pixels are fixed-size units that are used in screen media (i.e. to be read on the computer screen). One pixel is equal to one dot on the computer screen (the smallest division of your screen’s resolution). Many web designers use pixel units in web documents in order to produce a pixel-perfect representation of their site as it is rendered in the browser. One problem with the pixel unit is that it does not scale upward for visually-impaired readers or downward to fit mobile devices.",[1118,31784],{},[1118,31786],{},"\nPoints (pt): Points are traditionally used in print media (anything that is to be printed on paper, etc.). One point is equal to 1\u002F72 of an inch. Points are much like pixels, in that they are fixed-size units and cannot scale in size.",[1118,31789],{},[1118,31791],{},"\nPercent (%): The percent unit is much like the “em” unit, save for a few fundamental differences. First and foremost, the current font-size is equal to 100% (i.e. 12pt = 100%). While using the percent unit, your text remains fully scalable for mobile devices and for accessibility.",[1118,31794],{},[1118,31796],{},"\nTip….it can be easy to set the font size via px’s or pt’s however you are not helping those users that want to scale the size up or down.  For this reason the em and percent users are preferred for web document text",[1118,31799],{},[1118,31801],{},"\nTip…try setting the body { font-size: 62.5%} and then use th em unit to size it from there.  As long as the body is set using the percent unit, you may choose to use either percent or ems on any other css rules and selectors and still retain the benefits of using percent as your base font size.",[1118,31804],{},[1118,31806],{},"\nTip..try not to use px to set font-size as they can become problems on mobile devices where the resolutions are very high density (200 to 300 pixels per inch) making the fonts very small.",[1118,31809],{},[1118,31811],{},[1118,31813],{},[156,31815],{"style":15880,"src":31816,"alt":1080},"\u002Farticles\u002Fimages\u002Ffont-size.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":31818},[],"2015-04-20T08:07:13.0200000-04:00","Four different units by which you can measure the size of text...",{},"\u002Farticles\u002Ffont-sizes-comparison-em-vs-px-vs-pt-vs-percent",{"title":31766,"description":31820},"articles\u002Ffont-sizes-comparison-em-vs-px-vs-pt-vs-percent",[8650],"d3ZQ0y2RkNUGZMlxtnCHgx4B7dBOczGAZJWp7ktXh2U",{"id":31828,"title":31829,"author":8,"body":31830,"createdAt":31881,"description":31882,"extension":1101,"img":31883,"meta":31884,"navigation":1104,"path":31885,"seo":31886,"stem":31887,"tags":31888,"updatedAt":31881,"__hash__":31889},"articles\u002Farticles\u002Fnew-ssdt-power-tools-now-for-both-visual-studio-2010-and-visual-studio-2012.md","New SSDT Power Tools! Now for both Visual Studio 2010 and Visual Studio 2012",{"type":10,"value":31831,"toc":31879},[31832,31835,31838],[16,31833,31834],{},"Microsoft is pleased to announce the latest release of SSDT Power Tools!",[16,31836,31837],{},"We continue to use power tools to get early versions of experiences or quick features to you and we’re always interested in hearing your feedback.",[16,31839,31840,31841,31844,31845,31848,31851,31852,31855,31858,31859,13053,31863,31867,31868,31870,31871,31873,31876],{},"This release of the tools (Version 1.3) builds on the previous release.  This release of the power tools is",[21067,31842,31843],{}," only ","compatible with the newest update for SQL Server Data Tools. First, get the SSDT – September 2012 update for Visual Studio 2010 or Visual Studio 2012 here:  SSDT for Visual Studio 2012: ",[1139,31846],{"href":31847},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Fjj650015",[1139,31849,31847],{"href":31847,"rel":31850},[3695],"  SSDT for Visual Studio 2010: ",[1139,31853],{"href":31854},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Fjj650014",[1139,31856,31854],{"href":31854,"rel":31857},[3695],"    For the first time, this power tools release provides a version of the power tools for Visual Studio 2012 in addition to the version for Visual Studio 2010. They are separate installs that you can grab here:  ",[1139,31860,31862],{"href":31861},"http:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F9b0228c6-15d1-44de-9279-66dde12bf861?SRC=Featured","SSDT Power Tools for Visual Studio 2010",[1139,31864,31866],{"href":31865},"http:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F96a2f8cc-0c8b-47dd-93cd-1e8e9f34a917","SSDT Power Tools for Visual Studio 2012","  Requirements:",[1118,31869],{},"\nSQL Server 2008 Service Pack 1",[1118,31872],{},[1139,31874],{"href":31875},"http:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fdetails.aspx?id=20302",[1139,31877,31875],{"href":31875,"rel":31878},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":31880},[],"2015-04-20T08:07:12.8400000-04:00","SQL Server Data Tools (SSDT) provides project templates and design surfaces for building SQL Server content types - relational databases, Analysis Services models, Reporting Services reports, and Integration Services packages.","\u002Farticles\u002Fimages\u002FMdpbTnH58m.png",{},"\u002Farticles\u002Fnew-ssdt-power-tools-now-for-both-visual-studio-2010-and-visual-studio-2012",{"title":31829,"description":31882},"articles\u002Fnew-ssdt-power-tools-now-for-both-visual-studio-2010-and-visual-studio-2012",[8526,7873,8743],"e_YUJhN16WAmwBhand1Scn-44WrB72gU7EuktLScjHE",{"id":31891,"title":31892,"author":8,"body":31893,"createdAt":31932,"description":31933,"extension":1101,"img":1915,"meta":31934,"navigation":1104,"path":31935,"seo":31936,"stem":31937,"tags":31938,"updatedAt":31932,"__hash__":31939},"articles\u002Farticles\u002Fusing-jsrender-with-javascript-and-html.md","Using JsRender with JavaScript and HTML",{"type":10,"value":31894,"toc":31930},[31895,31901,31905,31908,31915,31918],[16,31896,31897,31898,31900],{},"JsRender is a JavaScript library that allows you to define a boilerplate structure once and reuse it to generate HTML dynamically. JsRender brings a new templating library to HTML5 development that has a codeless tag syntax and high performance, has no dependency on jQuery nor on the Document Object Model (DOM), supports creating custom functions and uses pure string-based rendering.",[1118,31899],{},"\nThe following sample will utilize a method within a MVC controller to output json string via jquery ajax call.",[2232,31902,31904],{"className":31903},[18546,8723],"        public JsonResult GetCustomers()  \n        {  \n            var customers = new List(){  \n                new Customer() { ID= \"1\", Name= \"Bobby Jones\", Birthday= \"1902-03-17\" },  \n                new Customer() { ID= \"2\", Name= \"Sam Snead\",   Birthday= \"1912-05-27\" },  \n                new Customer() { ID= \"3\", Name= \"Tiger Woods\", Birthday= \"1975-12-30\" }  \n            };             \n            return this.Json(customers, JsonRequestBehavior.AllowGet);  \n            }  \n        }  \n  \n    public class Customer{  \n        public string ID {get; set;}  \n        public string Name {get; set;}  \n        public string Birthday {get; set;}  \n    }  \n    ",[16,31906,31907],{},"You can render templates using JavaScript in several ways. First you’ll want to define your template either as a string or in a \u003Cscript> tag. The \u003Cscript> tag option is nice when you want to define your templates in the HTML, give them an id and reuse them. You can also create templates from strings, which gives you the ability to create them on the fly in code or even pull them from a data store..  The JavaScript on the page is as follows",[2232,31909,10274,31911,10274],{"className":31910},[18546,5166],[8801,31912,31914],{"type":31913},"text\u002Fjavascript","\u002F\u002F \u003C![CDATA[  \n         function getdata() {  \n        var s = $.getJSON(\"\u002FHome\u002FGetCustomers\", function (data) {  \n             $(\"#GolferDiv\").html($(\"#InnerGolferTemplate1\").render(data));  \n        });           \n        }  \n\u002F\u002F ]]>",[9636,31916,8422],{"id":31917},"GolferDiv",[2232,31919,31921,10274,31926,10274],{"className":31920},[18546,8650],[31922,31923],"input",{"type":31924,"value":31925},"button","get data",[8801,31927,31929],{"id":31928,"type":31913},"InnerGolferTemplate1","\u002F\u002F \u003C![CDATA[  \n         {{:ID}}: \u003Cb>{{:Name}}\u003C\u002Fb> \u003Ci>{{:Birthday}}\u003C\u002Fi> \u003Cbr \u002F>  \n\u002F\u002F ]]>",{"title":1080,"searchDepth":1081,"depth":1081,"links":31931},[],"2015-04-20T08:07:12.7600000-04:00","JsRender is a JavaScript library that allows you to define a boilerplate structure once and reuse it to generate HTML dynamically.",{},"\u002Farticles\u002Fusing-jsrender-with-javascript-and-html",{"title":31892,"description":31933},"articles\u002Fusing-jsrender-with-javascript-and-html",[5166],"X9dre_jVgpJBCollFTxNxhq1RoM7KALI3HKpYTjYECA",{"id":31941,"title":31942,"author":8,"body":31943,"createdAt":32056,"description":1915,"extension":1101,"img":1915,"meta":32057,"navigation":1104,"path":32058,"seo":32059,"stem":32060,"tags":32061,"updatedAt":32056,"__hash__":32063},"articles\u002Farticles\u002Fjavascript-patterns-benefits.md","JavaScript Patterns–Benefits",{"type":10,"value":31944,"toc":32054},[31945,31950,31958,31963,31992,31997,32016,32021,32032,32037],[16,31946,31947],{},[19,31948,31949],{},"Closures",[48,31951,31952,31955],{},[51,31953,31954],{},"By default, all variables and functions are added to the global scope, possibly causing naming conflicts",[51,31956,31957],{},"closures can be used to define scopes nested function have always accessed to all objects defined in the outer scope\nif a nested function references an object defined in the outer scope, a closure is created and the object will not be destroyed when the outer function is returned",[16,31959,31960],{},[19,31961,31962],{},"Prototype Pattern",[48,31964,31965,31968,31971,31974,31977,31980,31983,31986,31989],{},[51,31966,31967],{},"similar to a class, a prototype is a blueprint for objects",[51,31969,31970],{},"encapsulates code into modules and takes it out of the global namespace",[51,31972,31973],{},"variables are assigned in the constructor",[51,31975,31976],{},"functions are defined in the prototype block",[51,31978,31979],{},"this keyword is required to reference variables and functions within one prototype",[51,31981,31982],{},"all functions are only loaded once into memory, no matter how many objects are created using the constructor",[51,31984,31985],{},"Allow functions to be overridden",[51,31987,31988],{},"variables are specific to one instance",[51,31990,31991],{},"functions are shared among all instances",[16,31993,31994],{},[19,31995,31996],{},"Module Pattern",[48,31998,31999,32001,32004,32007,32010,32013],{},[51,32000,31970],{},[51,32002,32003],{},"allows definition of private\u002Fpublic members",[51,32005,32006],{},"if multiple objects are created, all functions are loaded into memory multiple times",[51,32008,32009],{},"less extensible than the prototype pattern",[51,32011,32012],{},"members in the return statement are public, members outside the return statement are private",[51,32014,32015],{},"does not require the use of a constructor and is often initialized using a self calling function (= singleton)",[16,32017,32018],{},[19,32019,32020],{},"Revealing Module Pattern",[48,32022,32023,32026,32029],{},[51,32024,32025],{},"Very similar to the module pattern",[51,32027,32028],{},"Cleaner separation between private members and public interface",[51,32030,32031],{},"Instead of public functions, an object literal is returned which contains references to the private functions which should be exposed",[16,32033,32034],{},[19,32035,32036],{},"Revealing Prototype Pattern",[48,32038,32039,32042,32045,32048,32051],{},[51,32040,32041],{},"very similar to the prototype pattern",[51,32043,32044],{},"adds the separation of private and public members from the revealing module pattern",[51,32046,32047],{},"if a method calls another method within the prototype, the 'this' is no longer the object but the calling method",[51,32049,32050],{},"'this' can be passed as a parameter or",[51,32052,32053],{},"the method can be called with method name.call(this, anotherParam) which passes the context (the signature of \"methodname\" is just methodname(anotherParam)",{"title":1080,"searchDepth":1081,"depth":1081,"links":32055},[],"2015-04-20T08:07:12.5700000-04:00",{},"\u002Farticles\u002Fjavascript-patterns-benefits",{"title":31942,"description":1915},"articles\u002Fjavascript-patterns-benefits",[32062],"Javascript","Gq2t3bvJ5d2golE5WDJLg47e7WKz_s48o16aPtRqkNU",{"id":32065,"title":32066,"author":8,"body":32067,"createdAt":32568,"description":32569,"extension":1101,"img":8103,"meta":32570,"navigation":1104,"path":32571,"seo":32572,"stem":32573,"tags":32574,"updatedAt":32568,"__hash__":32575},"articles\u002Farticles\u002Fpattern-singleton-c.md","Pattern Singleton c#",{"type":10,"value":32068,"toc":32566},[32069,32129,32226,32236,32247,32256,32272,32337,32344,32350,32353,32465,32476,32488,32541,32549,32557,32564],[16,32070,32071,32072,14501,32074,32076,32077,14501,32079,32081,32082,32085,32086,32089,32090,32093,32094,1200,32096,32098,32099,14501,32101,32103,32104,32106,32107,32110,32111,32113,32114,32117,32118,32120,32121,32124,32125,32128],{},"In software engineering, the singleton pattern is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. The concept is sometimes generalized to systems that operate more efficiently when only one object exists, or that restrict the instantiation to a certain number of objects.",[1118,32073],{},[1118,32075],{},"\nImplementation of a singleton pattern must satisfy the single instance and global access principles. It requires a mechanism to access the singleton class member without creating a class object and a mechanism to persist the value of class members among class objects. The singleton pattern is implemented by creating a class with a method that creates a new instance of the class if one does not exist. If an instance already exists, it simply returns a reference to that object. To make sure that the object cannot be instantiated any other way, the constructor is made private.",[1118,32078],{},[1118,32080],{},"\nNote the ",[19,32083,32084],{},"distinction"," between a simple ",[19,32087,32088],{},"static instance"," of a class, and a ",[19,32091,32092],{},"singleton",": although a singleton can be implemented as a static instance, it can also be lazily constructed, requiring no memory or resources until needed. Another notable difference is that static member classes cannot implement an interface, unless that interface is simply a marker. So if the class has to realize a contract expressed by an interface, it really has to be a ",[19,32095,32092],{},[1118,32097],{},"\nThe singleton pattern must be carefully constructed in multi-threaded applications. If two threads are to execute the creation method at the same time when a singleton does not yet exist, they both must check for an instance of the singleton and then only one should create the new one. If the programming language has concurrent processing capabilities the method should be constructed to execute as a mutually exclusive operation. ",[1118,32100],{},[1118,32102],{},"\nThe following is an example implementation with the following benefits:",[1118,32105],{},"\na) Because the instance is created inside the ",[19,32108,32109],{},"Instance ","property method, the class can exercise additional functionality (for example, instantiating a subclass), even though it may introduce unwelcome dependencies.",[1118,32112],{},"\nb) The instantiation is not performed until an object asks for an instance; this approach is referred to as ",[1128,32115,32116],{},"lazy instantiation",". Lazy instantiation avoids instantiating unnecessary singletons when the application starts.",[1118,32119],{},"\nThe disadvantage of the following implementation is that it is NOT thread safe for multithreading environments. \nIf separate threads of execution enter the ",[19,32122,32123],{},"Instance ","property method at the same time, more than one instance\nof the ",[19,32126,32127],{},"Singleton"," object may be created. Each thread could execute the following statement and decide that a new instance has to be created:",[2232,32130,32132],{"className":8721,"code":32131,"language":8723,"meta":1080,"style":1080},"using System;  \npublic class Singleton  \n{  \n   private static Singleton instance;\n  \n   private Singleton() {}\n  \n   public static Singleton Instance  \n   {  \n      get   \n      {  \n         if (instance == null)  \n         {  \n            instance = new Singleton();  \n         }  \n         return instance;  \n      }  \n   }  \n}&nbsp;\n",[2239,32133,32134,32139,32144,32148,32153,32157,32162,32166,32171,32176,32181,32186,32191,32196,32201,32206,32211,32216,32221],{"__ignoreMap":1080},[4215,32135,32136],{"class":4217,"line":4218},[4215,32137,32138],{},"using System;  \n",[4215,32140,32141],{"class":4217,"line":1081},[4215,32142,32143],{},"public class Singleton  \n",[4215,32145,32146],{"class":4217,"line":1084},[4215,32147,10244],{},[4215,32149,32150],{"class":4217,"line":4234},[4215,32151,32152],{},"   private static Singleton instance;\n",[4215,32154,32155],{"class":4217,"line":4240},[4215,32156,10274],{},[4215,32158,32159],{"class":4217,"line":4246},[4215,32160,32161],{},"   private Singleton() {}\n",[4215,32163,32164],{"class":4217,"line":4252},[4215,32165,10274],{},[4215,32167,32168],{"class":4217,"line":4258},[4215,32169,32170],{},"   public static Singleton Instance  \n",[4215,32172,32173],{"class":4217,"line":4264},[4215,32174,32175],{},"   {  \n",[4215,32177,32178],{"class":4217,"line":4270},[4215,32179,32180],{},"      get   \n",[4215,32182,32183],{"class":4217,"line":4276},[4215,32184,32185],{},"      {  \n",[4215,32187,32188],{"class":4217,"line":4282},[4215,32189,32190],{},"         if (instance == null)  \n",[4215,32192,32193],{"class":4217,"line":4288},[4215,32194,32195],{},"         {  \n",[4215,32197,32198],{"class":4217,"line":4294},[4215,32199,32200],{},"            instance = new Singleton();  \n",[4215,32202,32203],{"class":4217,"line":4300},[4215,32204,32205],{},"         }  \n",[4215,32207,32208],{"class":4217,"line":4306},[4215,32209,32210],{},"         return instance;  \n",[4215,32212,32213],{"class":4217,"line":4312},[4215,32214,32215],{},"      }  \n",[4215,32217,32218],{"class":4217,"line":4318},[4215,32219,32220],{},"   }  \n",[4215,32222,32223],{"class":4217,"line":4324},[4215,32224,32225],{},"}&nbsp;\n",[16,32227,32228,32229,32232,32233,32235],{},"There is one approach name ‘double-check locking’ to help resolve the above thread-safe issue however the .NET Framework resolve this via the ",[19,32230,32231],{},"static initialization ","implementation.",[1118,32234],{},"\n\u003C\nbr>In this strategy, the instance is created the first time any member of the class is referenced. The common language runtime takes care of the variable initialization.",[16,32237,32238,32239,32242,32243,32246],{},"The class is marked ",[19,32240,32241],{},"sealed"," to prevent derivation, which could add instances. In addition, the variable is marked ",[19,32244,32245],{},"readonly",", which means that it can be assigned only during static initialization (which is shown here) or in a class constructor.",[16,32248,32249,32250,32252,32253,32255],{},"This implementation is similar to the preceding example, except that it relies on the common language runtime to initialize the variable. It still addresses the two basic problems that the ",[1128,32251,32127],{}," pattern is trying to solve: global access and instantiation control.\nThe public static property provides a global access point to the instance. Also, because the constructor is private, the ",[19,32254,32127],{}," class cannot be instantiated outside of the class itself; therefore, the variable refers to the only instance that can exist in the system.",[16,32257,32258,32259,32261,32262,32265,32266,32269,32270,1200],{},"Because the ",[19,32260,32127],{}," instance is referenced by a private static member variable, the instantiation does not occur until the class is first referenced by a call to the ",[19,32263,32264],{},"Instance"," property. This solution therefore implements a form of the lazy instantiation property, as in the ",[1128,32267,32268],{},"Design Patterns"," form of ",[1128,32271,32127],{},[2232,32273,32275],{"className":8721,"code":32274,"language":8723,"meta":1080,"style":1080},"public sealed class Singleton  \n{  \n   private static readonly Singleton instance = new Singleton();  \n     \n   private Singleton(){}  \n  \n   public static Singleton Instance  \n   {  \n      get   \n      {  \n         return instance;   \n      }  \n   }  \n}\n",[2239,32276,32277,32282,32286,32291,32295,32300,32304,32308,32312,32316,32320,32325,32329,32333],{"__ignoreMap":1080},[4215,32278,32279],{"class":4217,"line":4218},[4215,32280,32281],{},"public sealed class Singleton  \n",[4215,32283,32284],{"class":4217,"line":1081},[4215,32285,10244],{},[4215,32287,32288],{"class":4217,"line":1084},[4215,32289,32290],{},"   private static readonly Singleton instance = new Singleton();  \n",[4215,32292,32293],{"class":4217,"line":4234},[4215,32294,8853],{},[4215,32296,32297],{"class":4217,"line":4240},[4215,32298,32299],{},"   private Singleton(){}  \n",[4215,32301,32302],{"class":4217,"line":4246},[4215,32303,10274],{},[4215,32305,32306],{"class":4217,"line":4252},[4215,32307,32170],{},[4215,32309,32310],{"class":4217,"line":4258},[4215,32311,32175],{},[4215,32313,32314],{"class":4217,"line":4264},[4215,32315,32180],{},[4215,32317,32318],{"class":4217,"line":4270},[4215,32319,32185],{},[4215,32321,32322],{"class":4217,"line":4276},[4215,32323,32324],{},"         return instance;   \n",[4215,32326,32327],{"class":4217,"line":4282},[4215,32328,32215],{},[4215,32330,32331],{"class":4217,"line":4288},[4215,32332,32220],{},[4215,32334,32335],{"class":4217,"line":4294},[4215,32336,9887],{},[16,32338,8422,32339,32341,32342],{},[1118,32340],{},"\nThe only potential downside of this approach is that you have less control over the mechanics of the instantiation. In the Design Patterns form, you were able to use a nondefault constructor or perform other tasks before the instantiation.  Because the .NET Framework performs the initialization in this solution, you do not have these options. In most cases, static initialization is the preferred approach for implementing a Singleton in .NET.\n",[19,32343],{},[16,32345,32346,32349],{},[19,32347,32348],{},"Finally Multithreaded Singleton\n","Static initialization is suitable for most situations. When your application must delay the instantiation, use a non-default constructor or perform other tasks before the instantiation, and work in a multithreaded environment, you need a different solution.  ",[16,32351,32352],{},"The following implementation allows only a single thread to enter the critical area, which the lock block identifies, when no instance of Singleton has yet been created:",[2232,32354,32356],{"className":8721,"code":32355,"language":8723,"meta":1080,"style":1080},"using System;  \npublic sealed class Singleton  \n{  \n   private static volatile Singleton instance;  \n   private static object syncRoot = new Object();  \n  \n   private Singleton() {}  \n  \n   public static Singleton Instance  \n   {  \n      get   \n      {  \n         if (instance == null)   \n         {  \n            lock (syncRoot)   \n            {  \n               if (instance == null)   \n                  instance = new Singleton();  \n            }  \n         }  \n  \n         return instance;  \n      }  \n   }  \n}  \n",[2239,32357,32358,32362,32366,32370,32375,32380,32384,32389,32393,32397,32401,32405,32409,32414,32418,32423,32427,32432,32437,32441,32445,32449,32453,32457,32461],{"__ignoreMap":1080},[4215,32359,32360],{"class":4217,"line":4218},[4215,32361,32138],{},[4215,32363,32364],{"class":4217,"line":1081},[4215,32365,32281],{},[4215,32367,32368],{"class":4217,"line":1084},[4215,32369,10244],{},[4215,32371,32372],{"class":4217,"line":4234},[4215,32373,32374],{},"   private static volatile Singleton instance;  \n",[4215,32376,32377],{"class":4217,"line":4240},[4215,32378,32379],{},"   private static object syncRoot = new Object();  \n",[4215,32381,32382],{"class":4217,"line":4246},[4215,32383,10274],{},[4215,32385,32386],{"class":4217,"line":4252},[4215,32387,32388],{},"   private Singleton() {}  \n",[4215,32390,32391],{"class":4217,"line":4258},[4215,32392,10274],{},[4215,32394,32395],{"class":4217,"line":4264},[4215,32396,32170],{},[4215,32398,32399],{"class":4217,"line":4270},[4215,32400,32175],{},[4215,32402,32403],{"class":4217,"line":4276},[4215,32404,32180],{},[4215,32406,32407],{"class":4217,"line":4282},[4215,32408,32185],{},[4215,32410,32411],{"class":4217,"line":4288},[4215,32412,32413],{},"         if (instance == null)   \n",[4215,32415,32416],{"class":4217,"line":4294},[4215,32417,32195],{},[4215,32419,32420],{"class":4217,"line":4300},[4215,32421,32422],{},"            lock (syncRoot)   \n",[4215,32424,32425],{"class":4217,"line":4306},[4215,32426,15669],{},[4215,32428,32429],{"class":4217,"line":4312},[4215,32430,32431],{},"               if (instance == null)   \n",[4215,32433,32434],{"class":4217,"line":4318},[4215,32435,32436],{},"                  instance = new Singleton();  \n",[4215,32438,32439],{"class":4217,"line":4324},[4215,32440,15709],{},[4215,32442,32443],{"class":4217,"line":4330},[4215,32444,32205],{},[4215,32446,32447],{"class":4217,"line":4336},[4215,32448,10274],{},[4215,32450,32451],{"class":4217,"line":4342},[4215,32452,32210],{},[4215,32454,32455],{"class":4217,"line":4348},[4215,32456,32215],{},[4215,32458,32459],{"class":4217,"line":4353},[4215,32460,32220],{},[4215,32462,32463],{"class":4217,"line":4359},[4215,32464,9887],{},[16,32466,32467,32468,32471,32472,32475],{},"This approach ensures that only one instance is created and only when the instance is needed. Also, the variable is declared to be ",[19,32469,32470],{},"volatile"," to ensure that assignment to the instance variable completes before the instance variable can be accessed. Lastly, this approach uses a ",[19,32473,32474],{},"syncRoot ","instance to lock on, rather than locking on the type itself, to avoid deadlocks.",[16,32477,32478,32479,32481,32482,32484,32487],{},"This double-check locking approach solves the thread concurrency problems while avoiding an exclusive lock in every call to the ",[19,32480,32109],{},"property method. It also allows you to delay instantiation until the object is first accessed. In practice, an application rarely requires this type of implementation. In most cases, the static initialization approach is sufficient. ",[1118,32483],{},[19,32485,32486],{},"Finally, ","there is a much cleaner approach than above if using .NET 4 or greater.",[2232,32489,32491],{"className":8721,"code":32490,"language":8723,"meta":1080,"style":1080},"public sealed class Singleton  \n{  \n    private static readonly Lazy lazy =  \n        new Lazy(() =&gt; new Singleton());  \n      \n    public static Singleton Instance { get { return lazy.Value; } }  \n  \n    private Singleton()  \n    {  \n    }  \n}\n",[2239,32492,32493,32497,32501,32506,32511,32515,32520,32524,32529,32533,32537],{"__ignoreMap":1080},[4215,32494,32495],{"class":4217,"line":4218},[4215,32496,32281],{},[4215,32498,32499],{"class":4217,"line":1081},[4215,32500,10244],{},[4215,32502,32503],{"class":4217,"line":1084},[4215,32504,32505],{},"    private static readonly Lazy lazy =  \n",[4215,32507,32508],{"class":4217,"line":4234},[4215,32509,32510],{},"        new Lazy(() =&gt; new Singleton());  \n",[4215,32512,32513],{"class":4217,"line":4240},[4215,32514,17700],{},[4215,32516,32517],{"class":4217,"line":4246},[4215,32518,32519],{},"    public static Singleton Instance { get { return lazy.Value; } }  \n",[4215,32521,32522],{"class":4217,"line":4252},[4215,32523,10274],{},[4215,32525,32526],{"class":4217,"line":4258},[4215,32527,32528],{},"    private Singleton()  \n",[4215,32530,32531],{"class":4217,"line":4264},[4215,32532,10259],{},[4215,32534,32535],{"class":4217,"line":4270},[4215,32536,11671],{},[4215,32538,32539],{"class":4217,"line":4276},[4215,32540,9887],{},[16,32542,32543,32544,32548],{},"It's simple and performs well. It also allows you to check whether or not the instance has been created yet with the ",[1139,32545,32547],{"href":32546},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fdd642334.aspx","IsValueCreated"," property, if you need that.",[16,32550,11031,32551,32554],{},[1139,32552],{"title":32553,"href":32553},"http:\u002F\u002Fcsharpindepth.com\u002FArticles\u002FGeneral\u002FSingleton.aspx",[1139,32555,32553],{"href":32553,"rel":32556},[3695],[16,32558,32559],{},[1139,32560,32562],{"href":32561},"\u002Fmedia\u002Farticulate-import\u002Fsingleton.png",[156,32563],{"style":15880,"title":32092,"src":8103,"alt":32092,"width":14359,"height":11860,"border":8404},[4682,32565,5439],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":32567},[],"2015-04-20T08:07:12.4800000-04:00","Singleton pattern is a design",{},"\u002Farticles\u002Fpattern-singleton-c",{"title":32066,"description":32569},"articles\u002Fpattern-singleton-c",[8994],"MUee6xaTZWbY0EfT4p6OcSf6MrAr5AuTqJfu3KqqEVY",{"id":32577,"title":32578,"author":8,"body":32579,"createdAt":32739,"description":1915,"extension":1101,"img":1915,"meta":32740,"navigation":1104,"path":32741,"seo":32742,"stem":32743,"tags":32744,"updatedAt":32739,"__hash__":32745},"articles\u002Farticles\u002Fupgrading-to-mvc-4-from-prior-versions.md","Upgrading to MVC 4 (from prior versions)",{"type":10,"value":32580,"toc":32737},[32581,32589,32600,32608,32611,32624,32627,32632,32667,32681,32684,32686,32688,32725,32734],[16,32582,32583,32584,14501,32586,32588],{},"MVC 4 will happily run alongside ASP.NET MVC version 3 and .NET 4\u002FVS2010. You can thus experiment and create MVC 4 projects without fear of breaking your old applications.",[1118,32585],{},[1118,32587],{},"\n There are three main methods of upgrading to MVC 4:",[48,32590,32591,32594,32597],{},[51,32592,32593],{},"Copy existing content into a new MVC 4 project",[51,32595,32596],{},"Manually upgrade the project",[51,32598,32599],{},"Utilize the MVC 4 NuGet package (by applying the Microsoft.AspNet.MVC package)",[16,32601,32602,32603,14501,32605,32607],{}," Manual Upgrade Steps:",[1118,32604],{},[1118,32606],{},"\nOpen up all the web.config files in your project and replace any lines that read as the following:",[2232,32609,32610],{},"System.Web.Mvc, Version=3.0.0.0  \nSystem.Web.WebPages, Version=1.0.0.0  \nSystem.Web.Helpers, Version=1.0.0.0  \nSystem.Web.WebPages.Razor, Version=1.0.0.0",[16,32612,32613,32614,14501,32616,32618,32619,32621,32622,14501],{},"With their MVC 4 counterparts:",[1118,32615],{},[1118,32617],{},"\nSystem.Web.Mvc, Version=4.0.0.0\nSystem.Web.WebPages, Version=2.0.0.0\nSystem.Web.Helpers, Version=2.0.0.0,\nSystem.Web.WebPages.Razor, Version=2.0.0.0,",[1118,32620],{},"\nIn the root web.config file, add a new PreserveLoginUrl key entry:",[1118,32623],{},[2232,32625,32626],{},"\u003CappSettings>  \n  \u003Cadd key=\"webpages:Version\" value=\"2.0.0.0\" \u002F>  \n  \u003Cadd key=\"PreserveLoginUrl\" value=\"true\" \u002F>  \n\u003CappSettings>",[16,32628,32629,32630,14501],{},"Now delete any references to System.Web.MVC (v3). In Solution Explorer, remove the following assembly references:",[1118,32631],{},[48,32633,32634,32637,32640,32643,32646,32649,32652,32655,32658,32661,32664],{},[51,32635,32636],{},"System.Web.Mvc (v3.0.0.0)",[51,32638,32639],{},"System.Web.WebPages (v1.0.0.0)",[51,32641,32642],{},"System.Web.Razor (v1.0.0.0)",[51,32644,32645],{},"System.Web.WebPages.Deployment (v1.0.0.0)",[51,32647,32648],{},"System.Web.WebPages.Razor (v1.0.0.0)",[51,32650,32651],{},"Now add references to the new versions of these assemblies:",[51,32653,32654],{},"System.Web.Mvc (v4.0.0.0)",[51,32656,32657],{},"System.Web.WebPages (v2.0.0.0)",[51,32659,32660],{},"System.Web.Razor (v2.0.0.0)",[51,32662,32663],{},"System.Web.WebPages.Deployment (v2.0.0.0)",[51,32665,32666],{},"System.Web.WebPages.Razor (v2.0.0.0)",[16,32668,32669,32670,32672,32673,32675,32676,32678,32679,14501],{},"In Solution Explorer, unload your MVC project as we are going to make some changes to the project file; this won't work if the solution is open.",[1118,32671],{},"\nOpen the project file  and replace any references of the ProjectTypeGuids E53F8FEA-EAE0-44A6-8774-FFD645390401 with E3E379DF-F4C6-4180-9B81-6769533ABE47.",[1118,32674],{},"\nSave the changes you have made and reload the project.",[1118,32677],{},"\nFinally, if your application or its references uses any assemblies compiled against the previous version of MVC, tell these to use MVC4 by adding binding redirect entries such as the following:",[1118,32680],{},[2232,32682,32683],{},"\u003Cconfiguration>  \n  \u003Cruntime>  \n    \u003CassemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">  \n      \u003CdependentAssembly>  \n        \u003CassemblyIdentity name=\"System.Web.Helpers\"  \n             publicKeyToken=\"31bf3856ad364e35\" \u002F>  \n        \u003CbindingRedirect oldVersion=\"1.0.0.0\" newVersion=\"2.0.0.0\"\u002F>  \n      \u003C\u002FdependentAssembly>  \n      \u003CdependentAssembly>  \n        \u003CassemblyIdentity name=\"System.Web.Mvc\"  \n             publicKeyToken=\"31bf3856ad364e35\" \u002F>  \n        \u003CbindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"4.0.0.0\"\u002F>  \n      \u003C\u002FdependentAssembly>  \n      \u003CdependentAssembly>  \n        \u003CassemblyIdentity name=\"System.Web.WebPages\"  \n             publicKeyToken=\"31bf3856ad364e35\" \u002F>  \n        \u003CbindingRedirect oldVersion=\"1.0.0.0\" newVersion=\"2.0.0.0\"\u002F>  \n      \u003C\u002FdependentAssembly>  \n    \u003C\u002FassemblyBinding>  \n  \u003C\u002Fruntime>  \n\u003C\u002Fconfiguration>",[2232,32685,8422],{},[16,32687,18570],{},[48,32689,32690,32693,32696,32699,32702,32705,32708,32710,32713,32716,32719,32722],{},[51,32691,32692],{},"I had to do similar updates to the web.config located in the Views directory",[51,32694,32695],{},"If after you build and browse to the home page, you get errors like ‘The type or namespace {fill in} does not exist in the namespace..you are missing an assembly reference’ you may need to set ‘Copy Local = True’ on a few of the references.  In particular I had to set to True for the following assemblies:",[51,32697,32698],{},"Microsoft.Web.Infrastructure",[51,32700,32701],{},"System.Web.Helpers",[51,32703,32704],{},"System.Web.Http",[51,32706,32707],{},"System.Web.Http.WebHost",[51,32709,8510],{},[51,32711,32712],{},"System.Web.Razor",[51,32714,32715],{},"System.Web.WebPages",[51,32717,32718],{},"System.Web.WebPages.Deployment",[51,32720,32721],{},"System.Web.WebPages.Razor",[51,32723,32724],{},"WebGrease",[16,32726,32727,32728,32731],{},"ASP.NET MVC 4 new features - ",[1139,32729],{"title":32730,"href":32730},"http:\u002F\u002Fwww.asp.net\u002Fwhitepapers\u002Fmvc4-release-notes",[1139,32732,32730],{"href":32730,"rel":32733},[3695],[16,32735,32736],{},"Note: Also note .NET 4.5 is an extension to 4.0, it does not introduce a new runtime",{"title":1080,"searchDepth":1081,"depth":1081,"links":32738},[],"2015-04-20T08:07:12.3800000-04:00",{},"\u002Farticles\u002Fupgrading-to-mvc-4-from-prior-versions",{"title":32578,"description":1915},"articles\u002Fupgrading-to-mvc-4-from-prior-versions",[8994,8742],"GE11lDkpA4HwyWPf4GsE5CSacjnBx_Va3XEsyjiSaN8",{"id":32747,"title":22417,"author":8,"body":32748,"createdAt":32763,"description":32752,"extension":1101,"img":1915,"meta":32764,"navigation":1104,"path":32765,"seo":32766,"stem":32767,"tags":32768,"updatedAt":32763,"__hash__":32769},"articles\u002Farticles\u002Fdetermine-sharepoint.md",{"type":10,"value":32749,"toc":32761},[32750,32753,32759],[16,32751,32752],{},"Where to change the master page?",[16,32754,32755,32756],{},"Well, if you don’t have the Publishing feature activated navigate to ",[1139,32757,32758],{"href":22427},"\nhttp:\u002F\u002Fyour_server\u002Fsites\u002Fexamples\u002F_Layouts\u002FChangeSiteMasterPage.aspx",[16,32760,22432],{},{"title":1080,"searchDepth":1081,"depth":1081,"links":32762},[],"2015-04-20T08:07:12.2800000-04:00",{},"\u002Farticles\u002Fdetermine-sharepoint",{"title":22417,"description":32752},"articles\u002Fdetermine-sharepoint",[15562],"ucKyHjTyPVW98QxFFGeAY6bN3vLl8zlKK1NR1vY0_Gs",{"id":32771,"title":32772,"author":8,"body":32773,"createdAt":32814,"description":32815,"extension":1101,"img":32816,"meta":32817,"navigation":1104,"path":32818,"seo":32819,"stem":32820,"tags":32821,"updatedAt":32814,"__hash__":32822},"articles\u002Farticles\u002Fintellisense-and-javascript-in-visual-studio-2012.md","Intellisense and JavaScript in Visual Studio 2012",{"type":10,"value":32774,"toc":32812},[32775,32778],[16,32776,32777],{},"In short use _references.js file with your web projects.  What is _references.js?",[16,32779,32780,32781,32784,32785,14501,32787,32789,32790,14501,32792,32794,32795,14501,32797,32799,32800,14501,32802,32804,32805],{},"With the latest Visual Studio a new file _references.js is found in the scripts directory.  As you probably know, the ",[2239,32782,32783],{},"\u002F\u002F &lt;reference path=”…” \u002F&gt;"," syntax was introduced in Visual Studio long time ago to make you able to have intellisense in any JavaScript file to include everything defined in the JavaScript located at this path.  Said another way if you write the very first line in any JavaScript file, say “my-page.js”, and make sure the path points to the proper jQuery file, when you write code in “my-page.js”, you’ll get intellisense for everything in the jQuery file.",[1118,32786],{},[1118,32788],{},"\nThe quality of the intellisense will vary based on the referenced jQuery file, whether it’s minified file (least intellisense info, only member names, sometimes), just standard source\u002Fdebug file, or even one that VsDoc comments (best intellisense, might even have notes on what types you need to pass to methods, when defined in VsDoc comments).",[1118,32791],{},[1118,32793],{},"\nVisual Studio will give you intellisense from all files that have references in the “_references.js” file. This way you can define the global \u002F common files you use all the time. This might include some library files like jQuery, or some files you use everywhere in the project like some internal utilities files.  In addition, for related files, you can use the “\u003Creference >” syntax on top of every file to connect them (from intellisense point of view).",[1118,32796],{},[1118,32798],{},"\nThere is only one _references.js file for each project and is located in the \u002Fscripts directory.",[1118,32801],{},[1118,32803],{},"\nYou can manage this file manually or in the latest Visual Studio  release you can add\u002Fedit references via Tools > Options > Text Editor –> JavaScript –> Intellisense –> References node\n",[1139,32806,32808],{"href":32807},"\u002Fmedia\u002Farticulate-import\u002Fimage_6.png",[156,32809],{"style":32810,"src":32811,"border":8404,"alt":158,"title":158,"width":8473,"height":20041},"background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;","\u002Farticles\u002Fimages\u002F\u002Fmedia\u002Farticulate-import\u002Fimage_thumb_6.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":32813},[],"2015-04-20T08:07:12.1900000-04:00","How to enable intellisense with Visual Studio and JavaScript","\u002Farticles\u002Fimages\u002Fimage_thumb_6.png",{},"\u002Farticles\u002Fintellisense-and-javascript-in-visual-studio-2012",{"title":32772,"description":32815},"articles\u002Fintellisense-and-javascript-in-visual-studio-2012",[8994,8526],"oVO-9EOZCUi_NY9jWqCmtawNfh0TKJlWULh6dhsTtJY",{"id":32824,"title":32825,"author":8,"body":32826,"createdAt":32857,"description":32858,"extension":1101,"img":1915,"meta":32859,"navigation":1104,"path":32860,"seo":32861,"stem":32862,"tags":32863,"updatedAt":32857,"__hash__":32864},"articles\u002Farticles\u002Fjavascript-patterns-self-invocation.md","JavaScript Patterns Self invocation",{"type":10,"value":32827,"toc":32855},[32828,32834,32838,32841,32845,32848,32852],[16,32829,32830,32831,32833],{},"Self-invocation (also known as auto-invocation) is when a function executes immediately upon it's definition. ",[1118,32832],{},"\nThis is a core pattern and serves as the foundation for many other patterns of JavaScript development.  A self-invoking function is a standard function, just with a set of parentheses appended to the end.",[2232,32835,32837],{"className":32836},[18546,5166],"     \nfunction(){  \n    var msg = \"hello\";  \n    alert(msg);  \n}();  \n",[16,32839,32840],{},"The above example defines an anonymous function. This creates a literal function, yet since no name is attributed to it, the value is never stored. The trailing parenthesis tell the function to execute, just as if you were calling a named function. Once the function terminates, the variables are discarded and the global object remains unchanged. It it recommended that an extra set of parentheses wrap the function definition as well so to provide a visual clue to the developer that the function isn’t a normal function.",[2232,32842,32844],{"className":32843},[18546,5166],"     \n(function(){  \n    var msg = \"hello\";  \n    alert(msg);  \n})();  \n  \n",[16,32846,32847],{},"In the event where a self-invoking function requires parameters, they can be passed in the same manor that you would a regular function",[2232,32849,32851],{"className":32850},[18546,5166],"     \n(function(id){  \n    var msg = \"hello\";  \n    alert(msg);  \n})('idvalue');  \n  \n",[16,32853,32854],{},"In an effort to protect the global object, all JavaScript applications should be written within a self-invoking function. This will create an application scope in which variables can be created without the fear of them colliding with other applications. If a global variable is needed, developers must take the extra step by setting them directly within the window object. For example window.foo = ‘bar’;. Self-invocation is a fundamental pattern of professional JavaScript development.",{"title":1080,"searchDepth":1081,"depth":1081,"links":32856},[],"2015-04-20T08:07:12.0000000-04:00","Learn about self invocation javascript patterns.",{},"\u002Farticles\u002Fjavascript-patterns-self-invocation",{"title":32825,"description":32858},"articles\u002Fjavascript-patterns-self-invocation",[5166],"6mEuLpLXzvMN8rDuNWbgVGP4TND1riFnYdYRKLW0aeI",{"id":32866,"title":32867,"author":8,"body":32868,"createdAt":32896,"description":32897,"extension":1101,"img":32893,"meta":32898,"navigation":1104,"path":32899,"seo":32900,"stem":32901,"tags":32902,"updatedAt":32896,"__hash__":32903},"articles\u002Farticles\u002Fhow-to-delete-a-file-in-windows-with-a-too-long-filename.md","How to delete a file in Windows with a too long filename?",{"type":10,"value":32869,"toc":32894},[32870,32873,32876,32879,32882,32885],[16,32871,32872],{},"I came across a situation where I had to remove all files at this location C:\\Users{username}\\AppData\\Local\\Temp.",[16,32874,32875],{},"I was able to delete most of the files however I came across a Windows error stating that one or more files had a file name too long to be removed. I tried a number of approaches (not to be stated here) however the resolution was to use RoboCopy.",[16,32877,32878],{},"I created a local directory c:\\temp\\empty_dir with nothing in it.\nI then used the following RoboCopy command to mirror that empty directory with the problematic directory.",[16,32880,32881],{},"robocopy c:\\temp\\empty_dir C:\\Users{username}\\AppData\\Local\\Temp \u002Fs \u002Fmir",[16,32883,32884],{},"This works because robocopy internally uses the Unicode-aware versions of Win32 functions, with the \\?\\ prefix for file paths; those functions have a limit of 2¹⁶-1 (32,767) characters instead of 259",[16,32886,32887],{},[1139,32888,32890],{"href":32889},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-1da1028d1d1d_11da4-robo_2.jpg",[156,32891],{"title":32892,"style":16154,"border":8404,"alt":32892,"src":32893,"width":8450,"height":17507},"robo","\u002Farticles\u002Fimages\u002Fwindows-live-writer-1da1028d1d1d_11da4-robo_thumb.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":32895},[],"2010-01-27T13:25:31.2700000-05:00","Long file names within windows continues to be trouble and difficult to manage.",{},"\u002Farticles\u002Fhow-to-delete-a-file-in-windows-with-a-too-long-filename",{"title":32867,"description":32897},"articles\u002Fhow-to-delete-a-file-in-windows-with-a-too-long-filename",[4701],"U1_lv-0K6POEbvXcYmd2Tf8OYYciO6OT3p9TZrcrlQY",{"id":32905,"title":32906,"author":8,"body":32907,"createdAt":32997,"description":32998,"extension":1101,"img":32994,"meta":32999,"navigation":1104,"path":33000,"seo":33001,"stem":33002,"tags":33003,"updatedAt":32997,"__hash__":33004},"articles\u002Farticles\u002Ftodays-hot-links.md","Nov 2007 Links",{"type":10,"value":32908,"toc":32995},[32909,32912,32922,32925,32956,32959,32975,32978,32992],[16,32910,32911],{},"XAML Power toys - XAML Power Toys is a Visual Studio 2008 SP1 Multi-AppDomain Add-In that empowers WPF & Silverlight developers while working in the XAML editor. Its Line of Business form generation tools, Grid tools, DataGrid and ListView generation really shorten the XAML page layout time.",[48,32913,32914],{},[51,32915,32916,32919],{},[1139,32917],{"title":32918,"href":32918},"http:\u002F\u002Fkarlshifflett.wordpress.com\u002Fxaml-power-toys\u002F",[1139,32920,32918],{"href":32918,"rel":32921},[3695],[16,32923,32924],{},"Microsoft Chart Controls for .NET Framework 3.5 Released! - Microsoft Chart Controls for .NET Framework 3.5 are now publicly available.",[48,32926,32927,32933,32939,32945,32951],{},[51,32928,32929],{},[1139,32930,32931],{"title":32931,"href":32932},"Microsoft Chart Controls for Microsoft .NET Framework 3.5","http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en",[51,32934,32935],{},[1139,32936,32937],{"title":32937,"href":32938},"Microsoft Chart Controls for Microsoft .NET Framework 3.5 Language Pack","http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=581FF4E3-749F-4454-A5E3-DE4C463143BD&displaylang=en",[51,32940,32941],{},[1139,32942,32943],{"title":32943,"href":32944},"Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008","http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=1D69CE13-E1E5-4315-825C-F14D33A303E9&displaylang=en",[51,32946,32947],{},[1139,32948,32949],{"title":32949,"href":32950},"ASP.NET Samples","http:\u002F\u002Fcode.msdn.microsoft.com\u002Fmschart",[51,32952,32953],{},[1139,32954,861],{"title":861,"href":32955},"http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&displaylang=en",[16,32957,32958],{},"WPF Toolkit – Oct 2008 Release -",[48,32960,32961,32969],{},[51,32962,32963,32966],{},[1139,32964],{"title":32965,"href":32965},"http:\u002F\u002Fwww.codeplex.com\u002Fwpf\u002FRelease\u002FProjectReleases.aspx?ReleaseId=15598",[1139,32967,32965],{"href":32965,"rel":32968},[3695],[51,32970,32971],{},[1139,32972,32973],{"title":32973,"href":32974},"Permanent Link- Keep Your Office 2007 Documents Readily Available the Easy Way","http:\u002F\u002Fblogs.howtogeek.com\u002Fmysticgeek\u002F2008\u002F10\u002F27\u002Fkeep-your-office-2007-documents-readily-available-the-easy-way\u002F",[16,32976,32977],{},"CodeRush Xpress for C# - Developer Express and Microsoft are proud to announce a new version of CodeRush licensed exclusively for C# developers working in Visual Studio. The new product is called CodeRush Xpress, and it includes a fresh selection of hand-picked features taken from",[48,32979,32980,32986],{},[51,32981,32982],{},[1139,32983,32985],{"href":32984},"http:\u002F\u002Fwww.devexpress.com\u002FCodeRush","CodeRush",[51,32987,32988,1200],{},[1139,32989,32991],{"href":32990},"http:\u002F\u002Fwww.devexpress.com\u002FRefactor","Refactor! Pro",[156,32993],{"src":32994,"alt":1080},"\u002Farticles\u002Fimages\u002Fhotlinks1.jpg",{"title":1080,"searchDepth":1081,"depth":1081,"links":32996},[],"2007-11-19","A collection of links and web resources",{},"\u002Farticles\u002Ftodays-hot-links",{"title":32906,"description":32998},"articles\u002Ftodays-hot-links",[4701],"ohcebUt-Qn2aFeT0q0Ef6J5176N63uMrWc6oAyQtFdo",{"id":33006,"title":33007,"author":8,"body":33008,"createdAt":33117,"description":33118,"extension":1101,"img":33119,"meta":33120,"navigation":1104,"path":33121,"seo":33122,"stem":33123,"tags":33124,"updatedAt":33117,"__hash__":33125},"articles\u002Farticles\u002Frelevant-microsoft-developer-links-good-reading-learning.md","Relevant Microsoft Developer Links (Good Reading\u002FLearning)",{"type":10,"value":33009,"toc":33115},[33010,33018,33025,33032,33040,33048,33060,33068,33076,33083,33091,33099,33107],[16,33011,33012,33013,33017],{},"1.) ",[1139,33014,33016],{"href":33015,"target":1142},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Fdata\u002Fdefault.aspx","Microsoft Data Platform Site"," – news and updated releases of their most recent data products",[16,33019,8763,33020,33024],{},[1139,33021,33023],{"href":33022,"target":1142},"http:\u002F\u002Fblogs.msdn.com\u002Fadonet\u002F","ADO.NET Team blog"," - With so many new technologies and approaches this seems to be the source of the news with respect to data.     Development ",[16,33026,8773,33027,33031],{},[1139,33028,33030],{"href":33029,"target":1142},"http:\u002F\u002Fwww.codeplex.com\u002FExcelPackage","Excel generation on server"," (CodePlex)",[16,33033,33034,33035,33039],{},"4.) James Newton-King ",[1139,33036,33038],{"href":33037,"target":1142},"http:\u002F\u002Fjames.newtonking.com\u002Fprojects\u002Fjson-net.aspx","Json.NET"," - The Json.NET library makes working with JavaScript and JSON formatted data in .NET simple. Quickly read and write JSON using the JsonReader and JsonWriter or serialize your .NET objects with a single method call using the JsonSerializer.",[16,33041,33042,33043,33047],{},"5.) ",[1139,33044,33046],{"href":33045,"target":1142},"http:\u002F\u002Fsilverlight.net\u002Fblogs\u002Fjesseliberty\u002Farchive\u002F2009\u002F08\u002F16\u002Flinqtosql-a-detailed-review.aspx","LinqToSQL A Detailed Review"," by Jesse Libery",[16,33049,33050,33051,33055,33056,33059],{},"6.) ",[1139,33052,33054],{"href":33053,"target":1142},"http:\u002F\u002Fwww.myinkblog.com\u002F2009\u002F08\u002F04\u002F10-tips-for-writing-better-jquery-code\u002F","JQuery – 10 Tips for Better Code"," – check out also Best JQuery Tutorials ",[1139,33057,8578],{"href":33058,"target":1142},"http:\u002F\u002Fwww.ajaxline.com\u002Fbest-jquery-tutorials-for-june-2009","     Collaboration",[16,33061,33062,33063,33067],{},"7.) ",[1139,33064,33066],{"href":33065,"target":1142},"http:\u002F\u002Fetherpad.com\u002F","EtherPad"," – web based word processor that allows people to work together",[16,33069,33070,33071,33075],{},"8.) ",[1139,33072,33074],{"href":33073,"target":1142},"https:\u002F\u002Fconnect.microsoft.com\u002Fcontent\u002Fcontent.aspx?ContentID=6415&SiteID=94&wa=wsignin1.0","Microsoft SharedView"," - Connect with up to 15 people in different locations and get your point across by showing them what's on your screen. Share, review, and update documents with multiple people in real time.A Windows Live ID (Passport, Hotmail, or MSN) is required to start sessions, but not to join sessions. New in version 1.0: we have added a web based join experience to make SharedView even easier.     Operating Systems  ",[16,33077,33078,33079,8422],{},"9.)  ",[1139,33080,33082],{"href":33081,"target":1142},"http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWindows_7_editions#Comparison_chart","Windows 7 Edition Comparison Chart",[16,33084,33085,33086,33090],{},"10.)  ",[1139,33087,33089],{"href":33088,"target":1142},"http:\u002F\u002Fwww.hanselman.com\u002Fblog\u002FStepByStepHowToUpgradeFromWindowsXPToWindows7.aspx","Windows XP to Windows 7 Upgrade","     Tools",[16,33092,33093,33094,33098],{},"11.)  ",[1139,33095,33097],{"href":33096,"target":1142},"http:\u002F\u002Fwww.imgburn.com\u002F","ImgBurn"," – DVD Burner utility (Free)",[16,33100,33101,33102,33106],{},"12.) ",[1139,33103,33105],{"href":33104,"target":1142},"http:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fwindirstat\u002F","WinDirStat:Windows Directory Statistics"," (Free)     Fun",[16,33108,33109,33110,33114],{},"13.)  ",[1139,33111,33113],{"href":33112,"target":1142},"http:\u002F\u002Fmondays.pwop.com\u002F","Mondays"," – fun (sometimes crude) podcast with Carl Franklin(DotNetRocks), Karen Greenwald, Mark Miller(CodeRush) and Richard Campbell(RunAs Radio)",{"title":1080,"searchDepth":1081,"depth":1081,"links":33116},[],"2007-04-20T08:07:15.9100000-04:00","A set of good links and reference material","\u002Farticles\u002Fimages\u002Flinks.jpg",{},"\u002Farticles\u002Frelevant-microsoft-developer-links-good-reading-learning",{"title":33007,"description":33118},"articles\u002Frelevant-microsoft-developer-links-good-reading-learning",[4701],"ixHNPltZPtXjc8aDfNTIHpb19xG9_fj6fWo9fa4HXu8",{"id":33127,"title":33128,"author":8,"body":33129,"createdAt":33171,"description":33172,"extension":1101,"img":33168,"meta":33173,"navigation":1104,"path":33174,"seo":33175,"stem":33176,"tags":4701,"updatedAt":33171,"__hash__":33177},"articles\u002Farticles\u002Finternet-explorer-default-source-editor-view-source.md","Internet Explorer Default Source Editor (View Source)",{"type":10,"value":33130,"toc":33169},[33131,33134,33140,33146,33149,33161],[16,33132,33133],{},"With a new laptop there have been quite a few things I have had to configure again.  One of those is the default source view application related to Internet Explorer.  The following instructions apply to Windows XP (not sure yet on Vista).",[16,33135,33136,33137,33139],{},"I thought by changing the HTML Editor within IE (Tools - Internet Options - Programs) would have fixed the problem.  Nope, that did not work.  The following however does work nicely.",[1118,33138],{},"\nRun Regedit",[16,33141,33142,33143,33145],{},"HKEY_LOCAL_MACHINE",[1118,33144],{},"\n|- Software\n|-- Microsoft\n|--- Internet Explorer\n|---- View Source Editor\n|----- Editor Name (Default) = \"C:\\Program Files\\TextPad 4\\TextPad.exe\"",[16,33147,33148],{},"If 'View Source Editor' doesn't exist you will need to create then create the key 'Editor Name' and set the value to the path to the editor that you are going to use.",[16,33150,33151,33152,33156,33157],{},"I know other individuals like ",[1139,33153,33155],{"href":33154,"target":1142},"http:\u002F\u002Fwww.flos-freeware.ch\u002Fnotepad2.html","Notepad2"," or ",[1139,33158,33160],{"href":33159,"target":1142},"http:\u002F\u002Fwww.slickedit.com\u002F","SlickEdit",[16,33162,33163,33164,33166],{},"What editors do you use?",[1118,33165],{},[156,33167],{"src":33168,"alt":1080,"style":15306},"\u002Farticles\u002Fimages\u002Fie.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":33170},[],"2006-04-20T08:07:19.6300000-04:00","Tip on how to change the default viewsource editor (registry update)",{},"\u002Farticles\u002Finternet-explorer-default-source-editor-view-source",{"title":33128,"description":33172},"articles\u002Finternet-explorer-default-source-editor-view-source","oNJPEHPunm6tqXAGNNuCFnH2zyX6RzrF5-yvdTMEYPc",{"id":33179,"title":33180,"author":1915,"body":33181,"createdAt":1915,"description":33587,"extension":1101,"img":1915,"meta":33588,"navigation":1104,"path":33589,"seo":33590,"stem":33591,"tags":1915,"updatedAt":1915,"__hash__":33592},"articles\u002Farticles\u002Fasp-net-2-0-compilation-models.md","Asp Net 2 0 Compilation Models",{"type":10,"value":33182,"toc":33585},[33183,33185,33200,33204,33206,33209,33231,33239,33246,33252,33255,33263,33266,33271,33274,33278,33281,33284,33533],[32,33184],{},[16,33186,33187,33188,33190,33191,33193,33194,33196,33197,33199],{},"title: Asp.net 2.0 Compilation Models",[1118,33189],{},"\ndescription:  Compliation of asp.net, c#, vb.net applications can depend on different aspects.  Keep in mind the following factors.\ncreatedAt: 2015-04-20T08:07:20.7100000-04:00\nupdatedAt: 2015-04-20T08:07:20.7100000-04:00\nimg: \u002Farticles\u002Fimages\u002Fframework.png",[1118,33192],{},"\nauthor:",[1118,33195],{},"\nname: Admin",[1118,33198],{},"\ntags:",[48,33201,33202],{},[51,33203,8994],{},[32,33205],{},[16,33207,33208],{},"Keep the following in mind with 2.0 Asp.net applications",[48,33210,33211,33214,33217,33220,33223],{},[51,33212,33213],{},"Visual Studio 2005\u002F2008 knows nothing about compiling a web application.  Visual Studio lets the asp.net platform perform the compilation.",[51,33215,33216],{},"When you perform a VS.NET Build > VS.NET does not build the application, Asp.net performs the build build of all the .cs and .vb files.  The resulting assemblies are placed by default in the C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Temporary ASP.NET Files directory.",[51,33218,33219],{},"The debug setting in the web.config (debug\u002Frelease) controls the compilation mode.  If in debug mode then respective .pdb debugging symbol files are created.",[51,33221,33222],{},"The Configuration Manager in the default build model of Visual Studio is not utilized.  As a result the only option for a web site ‘project’ is the Debug compilation.  This is because the web.config controls the compilation.",[51,33224,33225,33226],{},"The Publish command will precompile the web application and place the files in a directory for deployment.  The Publish command executes the command line aspnet_compiler tool with the appropriate switches.  Publish will always precompile a release build without debugging symbols (pdb files)",[48,33227,33228],{},[51,33229,33230],{},"Note: the Publish command does not change the debug setting in the web.config.  The Publish command always compiles in release ode however if you precompile to an updateable web site and then update the web site in place those dynamic compilations will produce debug code and pdb files.",[16,33232,33233,33234,33238],{},"Using the ",[1139,33235,33237],{"target":1142,"href":33236},"http:\u002F\u002Fwww.microsoft.com\u002Fdownloads\u002Fdetails.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en","Web Site Deployment Utility"," (WSD)",[16,33240,33241,33242,33245],{},"Using WSD the above scenario is different.  Web Site Deployment project is really a nice interface on a MSBuild project.  The deployment project creates a MSBuild file and passes it to aspnet_compiler for compilation.  Unlike the VS.NET Publish the WSD ",[19,33243,33244],{},"will"," update the web.config for the right compilation mode.  The user controls the compilation mode within the Configuration Manager when using the Web",[16,33247,33248,33249,33251],{},"Site Deployment project.",[1118,33250],{},"\nSetting up Configuration Manager as follows will deploy the files to the directory highlighted below without debug symbols (debug=false).  By setting up the configuration as follows makes it easy to prepare for deployment.  Simply change the configuration mode and hit build.  As shown below it will simply prepare the application for build and asp_compiler will deploy to the selected directory. ",[16,33253,33254],{},"In addition to controlling the debug mode WSD is great for swapping out appsettings for different environments (i.e. stage\u002Ftest\u002Fproduction) respective for each build.",[16,33256,8422,33257],{},[156,33258],{"title":158,"style":33259,"height":33260,"alt":158,"width":33261,"border":8404,"src":33262},"BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px",272,435,"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_thumb_1.png",[16,33264,33265],{},"Control the deployed directory via Properties of the WSD project.",[156,33267],{"title":158,"style":33259,"height":33268,"alt":158,"width":33269,"border":8404,"src":33270},262,444,"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_thumb_3.png",[16,33272,33273],{},"By debug mode will look like the following.  Notice that I am not building the WSD project in this mode",[156,33275],{"title":158,"style":33259,"height":18855,"alt":158,"width":33276,"border":8404,"src":33277},462,"\u002Farticles\u002Fimages\u002FAsp.netCompilationModels_86E6\u002Fimage_thumb_4.png",[1139,33279,8578],{"target":1142,"href":33280},"http:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Faa479568.aspx",[19,33282,33283],{},"Additional Configuration of the MSBuild file",[9636,33285,10274,33287,10274,33299,10274,33319,10274,33336,10274,33353,10274,33370,10274,33387,10274,33404,10274,33421,10274,33438,10274,33455,10274,33472,10274,33489,10274,33506,10274,33524,10274],{"style":33286},"FONT-SIZE: 8pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: consolas",[2232,33288,33290,33293,33297],{"style":33289},"MARGIN: 0px",[4215,33291,8666],{"style":33292},"COLOR: blue",[4215,33294,33296],{"style":33295},"COLOR: #a31515","ItemGroup",[4215,33298,8850],{"style":33292},[2232,33300,33301,33303,33306,33308,33312,21032,33314,21032,33317],{"style":33289},[4215,33302,8858],{"style":33292},[4215,33304,33305],{"style":33295},"ExcludeFromBuild",[4215,33307,11776],{"style":33292},[4215,33309,33311],{"style":33310},"COLOR: red","Include",[4215,33313,8807],{"style":33292},[4215,33315,33316],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.vshost.exe",[4215,33318,23588],{"style":33292},[2232,33320,33321,33323,33325,33327,33329,21032,33331,21032,33334],{"style":33289},[4215,33322,8858],{"style":33292},[4215,33324,33305],{"style":33295},[4215,33326,11776],{"style":33292},[4215,33328,33311],{"style":33310},[4215,33330,8807],{"style":33292},[4215,33332,33333],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.sln",[4215,33335,23588],{"style":33292},[2232,33337,33338,33340,33342,33344,33346,21032,33348,21032,33351],{"style":33289},[4215,33339,8858],{"style":33292},[4215,33341,33305],{"style":33295},[4215,33343,11776],{"style":33292},[4215,33345,33311],{"style":33310},[4215,33347,8807],{"style":33292},[4215,33349,33350],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.csproj",[4215,33352,23588],{"style":33292},[2232,33354,33355,33357,33359,33361,33363,21032,33365,21032,33368],{"style":33289},[4215,33356,8858],{"style":33292},[4215,33358,33305],{"style":33295},[4215,33360,11776],{"style":33292},[4215,33362,33311],{"style":33310},[4215,33364,8807],{"style":33292},[4215,33366,33367],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.user",[4215,33369,23588],{"style":33292},[2232,33371,33372,33374,33376,33378,33380,21032,33382,21032,33385],{"style":33289},[4215,33373,8858],{"style":33292},[4215,33375,33305],{"style":33295},[4215,33377,11776],{"style":33292},[4215,33379,33311],{"style":33310},[4215,33381,8807],{"style":33292},[4215,33383,33384],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*Copy of*",[4215,33386,23588],{"style":33292},[2232,33388,33389,33391,33393,33395,33397,21032,33399,21032,33402],{"style":33289},[4215,33390,8858],{"style":33292},[4215,33392,33305],{"style":33295},[4215,33394,11776],{"style":33292},[4215,33396,33311],{"style":33310},[4215,33398,8807],{"style":33292},[4215,33400,33401],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.psd",[4215,33403,23588],{"style":33292},[2232,33405,33406,33408,33410,33412,33414,21032,33416,21032,33419],{"style":33289},[4215,33407,8858],{"style":33292},[4215,33409,33305],{"style":33295},[4215,33411,11776],{"style":33292},[4215,33413,33311],{"style":33310},[4215,33415,8807],{"style":33292},[4215,33417,33418],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.cmd",[4215,33420,23588],{"style":33292},[2232,33422,33423,33425,33427,33429,33431,21032,33433,21032,33436],{"style":33289},[4215,33424,8858],{"style":33292},[4215,33426,33305],{"style":33295},[4215,33428,11776],{"style":33292},[4215,33430,33311],{"style":33310},[4215,33432,8807],{"style":33292},[4215,33434,33435],{"style":33292},"$(SourceWebPhysicalPath)\\obj\\**\\*.*",[4215,33437,23588],{"style":33292},[2232,33439,33440,33442,33444,33446,33448,21032,33450,21032,33453],{"style":33289},[4215,33441,8858],{"style":33292},[4215,33443,33305],{"style":33295},[4215,33445,11776],{"style":33292},[4215,33447,33311],{"style":33310},[4215,33449,8807],{"style":33292},[4215,33451,33452],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.Publish.xml",[4215,33454,23588],{"style":33292},[2232,33456,33457,33459,33461,33463,33465,21032,33467,21032,33470],{"style":33289},[4215,33458,8858],{"style":33292},[4215,33460,33305],{"style":33295},[4215,33462,11776],{"style":33292},[4215,33464,33311],{"style":33310},[4215,33466,8807],{"style":33292},[4215,33468,33469],{"style":33292},"$(SourceWebPhysicalPath)\\test\\**\\*.*",[4215,33471,23588],{"style":33292},[2232,33473,33474,33476,33478,33480,33482,21032,33484,21032,33487],{"style":33289},[4215,33475,8858],{"style":33292},[4215,33477,33305],{"style":33295},[4215,33479,11776],{"style":33292},[4215,33481,33311],{"style":33310},[4215,33483,8807],{"style":33292},[4215,33485,33486],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.aspx.resx",[4215,33488,23588],{"style":33292},[2232,33490,33491,33493,33495,33497,33499,21032,33501,21032,33504],{"style":33289},[4215,33492,8858],{"style":33292},[4215,33494,33305],{"style":33295},[4215,33496,11776],{"style":33292},[4215,33498,33311],{"style":33310},[4215,33500,8807],{"style":33292},[4215,33502,33503],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.asax.resx",[4215,33505,23588],{"style":33292},[2232,33507,33508,33511,33513,33515,33517,21032,33519,21032,33522],{"style":33289},[4215,33509,33510],{"style":33292},"      \u003C",[4215,33512,33305],{"style":33295},[4215,33514,11776],{"style":33292},[4215,33516,33311],{"style":33310},[4215,33518,8807],{"style":33292},[4215,33520,33521],{"style":33292},"$(SourceWebPhysicalPath)\\**\\*.suo",[4215,33523,23588],{"style":33292},[2232,33525,33526,33529,33531],{"style":33289},[4215,33527,33528],{"style":33292},"  \u003C\u002F",[4215,33530,33296],{"style":33295},[4215,33532,8850],{"style":33292},[9636,33534,10274,33535,10274,33554,10274,33577,10274],{"style":33286},[2232,33536,33537,33539,33542,33544,33547,21032,33549,21032,33552],{"style":33289},[4215,33538,8858],{"style":33292},[4215,33540,33541],{"style":33295},"Target",[4215,33543,11776],{"style":33292},[4215,33545,33546],{"style":33310},"Name",[4215,33548,8807],{"style":33292},[4215,33550,33551],{"style":33292},"AfterBuild",[4215,33553,8850],{"style":33292},[2232,33555,33556,33558,33561,33563,33566,21032,33568,21032,33571,33573,33575],{"style":33289},[4215,33557,8869],{"style":33292},[4215,33559,33560],{"style":33295},"Delete",[4215,33562,11776],{"style":33292},[4215,33564,33565],{"style":33310},"Files",[4215,33567,8807],{"style":33292},[4215,33569,33570],{"style":33292},"$(OutputPath)\\PrecompiledApp.config",[4215,33572,8821],{"style":33292},[4215,33574,33560],{"style":33295},[4215,33576,8850],{"style":33292},[2232,33578,33579,33581,33583],{"style":33289},[4215,33580,8893],{"style":33292},[4215,33582,33541],{"style":33295},[4215,33584,8850],{"style":33292},{"title":1080,"searchDepth":1081,"depth":1081,"links":33586},[],"title: Asp.net 2.0 Compilation Models\ndescription:  Compliation of asp.net, c#, vb.net applications can depend on different aspects.  Keep in mind the following factors.\ncreatedAt: 2015-04-20T08:07:20.7100000-04:00\nupdatedAt: 2015-04-20T08:07:20.7100000-04:00\nimg: \u002Farticles\u002Fimages\u002Fframework.png\nauthor:\nname: Admin\ntags:",{},"\u002Farticles\u002Fasp-net-2-0-compilation-models",{"description":33587},"articles\u002Fasp-net-2-0-compilation-models","2PvzOAMkFYwvorxwYkeT7XEKqEyTkCUwCRtjMHvRQqk",{"id":33594,"title":33595,"author":1915,"body":33596,"createdAt":1915,"description":34018,"extension":1101,"img":1915,"meta":34019,"navigation":1104,"path":34020,"seo":34021,"stem":34022,"tags":1915,"updatedAt":1915,"__hash__":34023},"articles\u002Farticles\u002Fbootstrap-with-less-part-1.md","Bootstrap With Less Part 1",{"type":10,"value":33597,"toc":34016},[33598,33600,33610,33614,33616,33627,33630,33633,33806,33811,33932,33943,33946,34005,34013],[32,33599],{},[16,33601,33602,33603,33193,33605,33607,33608,33199],{},"title: Bootstrap with LESS (Part 1)\ndescription: Customize and extend Bootstrap with LESS, a CSS preprocessor, to take advantage of the variables, mixins, and more used to build Bootstrap's CSS\ncreatedAt: 2015-06-05T01:00:15.1300000-04:00\nupdatedAt: 2015-06-05T01:00:15.1300000-04:00\nimg: \u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-1_11c5b-less_thumb.png",[1118,33604],{},[1118,33606],{},"\nname: David",[1118,33609],{},[48,33611,33612],{},[51,33613,8994],{},[32,33615],{},[16,33617,33618,33619,33623,33624,16993],{},"The latest version of ",[1139,33620,33622],{"href":33621},"http:\u002F\u002Fgetbootstrap.com\u002F","Bootstrap"," uses LESS (a CSS preprocessor) to build the distributed css files.  Confused yet? So, lets focus on what is LESS and how can you compile css.  The best source of less documentation can be found ",[1139,33625,8578],{"href":33626},"http:\u002F\u002Fwww.lesscss.org\u002F",[16,33628,33629],{},"“Less is a CSS pre-processor, meaning that it extends the CSS language, adding features that allow variables, mixins, functions and many other techniques that allow you to make CSS that is more maintainable, themable and extendable.  Less runs inside Node, in the browser and inside Rhino. There are also many 3rd party tools that allow you to compile your files and watch for changes. ",[16,33631,33632],{},"For example:",[2232,33634,33636],{"className":30673,"code":33635,"language":30675,"meta":1080,"style":1080},"@base: #f938ab;  \n.box-shadow(@style, @c) when (iscolor(@c)) { \n   -webkit-box-shadow: @style @c; \n   box-shadow: @style @c; \n} \n.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { \n   .box-shadow(@style, rgba(0, 0, 0, @alpha)); \n} \n.box { \n   color: saturate(@base, 5%); \n   border-color: lighten(@base, 30%); \n   div { \n.box-shadow(0 0 5px, 30%) } \n}  \n",[2239,33637,33638,33652,33660,33673,33684,33689,33696,33723,33727,33735,33760,33780,33787,33802],{"__ignoreMap":1080},[4215,33639,33640,33642,33645,33647,33650],{"class":4217,"line":4218},[4215,33641,21060],{"class":8259},[4215,33643,33644],{"class":8800},"base",[4215,33646,3087],{"class":8259},[4215,33648,33649],{"class":8665},"#f938ab;",[4215,33651,10274],{"class":8259},[4215,33653,33654,33657],{"class":4217,"line":1081},[4215,33655,33656],{"class":8665},".box-shadow(@style",[4215,33658,33659],{"class":8259},", @c) when (iscolor(@c)) { \n",[4215,33661,33662,33665,33668,33670],{"class":4217,"line":1084},[4215,33663,33664],{"class":8255},"   -webkit-box-shadow",[4215,33666,33667],{"class":8259},": @",[4215,33669,4682],{"class":8255},[4215,33671,33672],{"class":8259}," @c; \n",[4215,33674,33675,33678,33680,33682],{"class":4217,"line":4234},[4215,33676,33677],{"class":8255},"   box-shadow",[4215,33679,33667],{"class":8259},[4215,33681,4682],{"class":8255},[4215,33683,33672],{"class":8259},[4215,33685,33686],{"class":4217,"line":4240},[4215,33687,33688],{"class":8259},"} \n",[4215,33690,33691,33693],{"class":4217,"line":4246},[4215,33692,33656],{"class":8665},[4215,33694,33695],{"class":8259},", @alpha: 50%) when (isnumber(@alpha)) { \n",[4215,33697,33698,33701,33704,33707,33709,33711,33714,33717,33720],{"class":4217,"line":4252},[4215,33699,33700],{"class":8259},"   .",[4215,33702,33703],{"class":8255},"box-shadow",[4215,33705,33706],{"class":8259},"(@",[4215,33708,4682],{"class":8255},[4215,33710,3091],{"class":8259},[4215,33712,33713],{"class":8255},"rgba",[4215,33715,33716],{"class":8259},"(0, 0, 0, @",[4215,33718,33719],{"class":8255},"alpha",[4215,33721,33722],{"class":8259},")); \n",[4215,33724,33725],{"class":4217,"line":4258},[4215,33726,33688],{"class":8259},[4215,33728,33729,33732],{"class":4217,"line":4264},[4215,33730,33731],{"class":4666},".box",[4215,33733,33734],{"class":8259}," { \n",[4215,33736,33737,33740,33742,33745,33747,33750,33752,33755,33757],{"class":4217,"line":4270},[4215,33738,33739],{"class":8255},"   color",[4215,33741,3087],{"class":8259},[4215,33743,33744],{"class":8255},"saturate",[4215,33746,14616],{"class":8259},[4215,33748,33749],{"class":22528},"@base",[4215,33751,3091],{"class":8259},[4215,33753,33754],{"class":8255},"5",[4215,33756,31228],{"class":8265},[4215,33758,33759],{"class":8259},"); \n",[4215,33761,33762,33765,33767,33770,33773,33776,33778],{"class":4217,"line":4276},[4215,33763,33764],{"class":8255},"   border-color",[4215,33766,3087],{"class":8259},[4215,33768,33769],{"class":8255},"lighten",[4215,33771,33772],{"class":8259},"(@base, ",[4215,33774,33775],{"class":8255},"30",[4215,33777,31228],{"class":8265},[4215,33779,33759],{"class":8259},[4215,33781,33782,33785],{"class":4217,"line":4282},[4215,33783,33784],{"class":8255},"   div",[4215,33786,33734],{"class":8259},[4215,33788,33789,33791,33793,33796,33799],{"class":4217,"line":4288},[4215,33790,1200],{"class":8259},[4215,33792,33703],{"class":8255},[4215,33794,33795],{"class":8259},"(0 0 5",[4215,33797,33798],{"class":8255},"px",[4215,33800,33801],{"class":8259},", 30%) } \n",[4215,33803,33804],{"class":4217,"line":4294},[4215,33805,9887],{"class":8259},[16,33807,33808],{},[19,33809,33810],{},"will compile to…",[2232,33812,33814],{"className":30673,"code":33813,"language":30675,"meta":1080,"style":1080},".box { \n   color: #fe33ac; border-color: #fdcdea; \n} \n.box div { \n   -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); \n   box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); \n}  \n",[2239,33815,33816,33822,33845,33849,33857,33894,33928],{"__ignoreMap":1080},[4215,33817,33818,33820],{"class":4217,"line":4218},[4215,33819,33731],{"class":4666},[4215,33821,33734],{"class":8259},[4215,33823,33824,33826,33828,33831,33834,33837,33839,33842],{"class":4217,"line":1081},[4215,33825,33739],{"class":8255},[4215,33827,3087],{"class":8259},[4215,33829,33830],{"class":8255},"#fe33ac",[4215,33832,33833],{"class":8259},"; ",[4215,33835,33836],{"class":8255},"border-color",[4215,33838,3087],{"class":8259},[4215,33840,33841],{"class":8255},"#fdcdea",[4215,33843,33844],{"class":8259},"; \n",[4215,33846,33847],{"class":4217,"line":1084},[4215,33848,33688],{"class":8259},[4215,33850,33851,33853,33855],{"class":4217,"line":4234},[4215,33852,33731],{"class":4666},[4215,33854,30806],{"class":8800},[4215,33856,33734],{"class":8259},[4215,33858,33859,33861,33863,33865,33867,33870,33872,33875,33877,33879,33881,33883,33885,33887,33889,33892],{"class":4217,"line":4240},[4215,33860,33664],{"class":8255},[4215,33862,3087],{"class":8259},[4215,33864,13084],{"class":8255},[4215,33866,13200],{"class":8255},[4215,33868,33869],{"class":8255}," 5",[4215,33871,33798],{"class":8265},[4215,33873,33874],{"class":8255}," rgba",[4215,33876,14616],{"class":8259},[4215,33878,13084],{"class":8255},[4215,33880,3091],{"class":8259},[4215,33882,13084],{"class":8255},[4215,33884,3091],{"class":8259},[4215,33886,13084],{"class":8255},[4215,33888,3091],{"class":8259},[4215,33890,33891],{"class":8255},"0.3",[4215,33893,33759],{"class":8259},[4215,33895,33896,33898,33900,33902,33904,33906,33908,33910,33912,33914,33916,33918,33920,33922,33924,33926],{"class":4217,"line":4246},[4215,33897,33677],{"class":8255},[4215,33899,3087],{"class":8259},[4215,33901,13084],{"class":8255},[4215,33903,13200],{"class":8255},[4215,33905,33869],{"class":8255},[4215,33907,33798],{"class":8265},[4215,33909,33874],{"class":8255},[4215,33911,14616],{"class":8259},[4215,33913,13084],{"class":8255},[4215,33915,3091],{"class":8259},[4215,33917,13084],{"class":8255},[4215,33919,3091],{"class":8259},[4215,33921,13084],{"class":8255},[4215,33923,3091],{"class":8259},[4215,33925,33891],{"class":8255},[4215,33927,33759],{"class":8259},[4215,33929,33930],{"class":4217,"line":4252},[4215,33931,9887],{"class":8259},[16,33933,33934,33935,33939,33940],{},"Essentially, LESS code will get compiled into CSS.  In order to compile there are command line applications.  Currently, I am using ",[1139,33936,33938],{"href":33937},"https:\u002F\u002Fnodejs.org\u002F","Node.js"," with a npm package installed via ",[19,33941,33942],{},"npm install –g less",[16,33944,33945],{},"Technically, you can also compile ‘client-side’ but in production it is recommended that the css is precompiled (remember compiling just means translating the less css code to simple css files).  Include your styles.less via the following link as well s the less.js file to perform compilation.",[2232,33947,33949],{"className":8648,"code":33948,"language":8650,"meta":1080,"style":1080},"\u003Clink rel=\"stylesheet\u002Fless\" type=\"text\u002Fcss\" href=\"styles.less\" \u002F>\n\u003Cscript src=\"less.js\" type=\"text\u002Fjavascript\">\u003C\u002Fscript>  \n",[2239,33950,33951,33980],{"__ignoreMap":1080},[4215,33952,33953,33955,33957,33959,33961,33964,33966,33968,33970,33972,33974,33977],{"class":4217,"line":4218},[4215,33954,8666],{"class":8259},[4215,33956,9452],{"class":8800},[4215,33958,9455],{"class":4666},[4215,33960,8807],{"class":8259},[4215,33962,33963],{"class":4669},"\"stylesheet\u002Fless\"",[4215,33965,8813],{"class":4666},[4215,33967,8807],{"class":8259},[4215,33969,27073],{"class":4669},[4215,33971,9463],{"class":4666},[4215,33973,8807],{"class":8259},[4215,33975,33976],{"class":4669},"\"styles.less\"",[4215,33978,33979],{"class":8259}," \u002F>\n",[4215,33981,33982,33984,33986,33988,33990,33993,33995,33997,33999,34001,34003],{"class":4217,"line":1081},[4215,33983,8666],{"class":8259},[4215,33985,8801],{"class":8800},[4215,33987,8804],{"class":4666},[4215,33989,8807],{"class":8259},[4215,33991,33992],{"class":4669},"\"less.js\"",[4215,33994,8813],{"class":4666},[4215,33996,8807],{"class":8259},[4215,33998,8818],{"class":4669},[4215,34000,8821],{"class":8259},[4215,34002,8801],{"class":8800},[4215,34004,8910],{"class":8259},[16,34006,11031,34007,34010],{},[1139,34008],{"href":34009,"target":1142},"https:\u002F\u002Fgetbootstrap.com\u002F2.0.1\u002Fless.html",[1139,34011,34009],{"href":34009,"rel":34012},[3695],[4682,34014,34015],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":1080,"searchDepth":1081,"depth":1081,"links":34017},[],"title: Bootstrap with LESS (Part 1)\ndescription: Customize and extend Bootstrap with LESS, a CSS preprocessor, to take advantage of the variables, mixins, and more used to build Bootstrap's CSS\ncreatedAt: 2015-06-05T01:00:15.1300000-04:00\nupdatedAt: 2015-06-05T01:00:15.1300000-04:00\nimg: \u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-1_11c5b-less_thumb.png\nauthor:\nname: David\ntags:",{},"\u002Farticles\u002Fbootstrap-with-less-part-1",{"description":34018},"articles\u002Fbootstrap-with-less-part-1","4zKmRuw9qM0LzxbznU6VsGSAVT01GDunYSwbJsbSFTk",{"id":34025,"title":34026,"author":1915,"body":34027,"createdAt":1915,"description":34290,"extension":1101,"img":1915,"meta":34291,"navigation":1104,"path":34292,"seo":34293,"stem":34294,"tags":1915,"updatedAt":1915,"__hash__":34295},"articles\u002Farticles\u002Fbootstrap-with-less-part-2.md","Bootstrap With Less Part 2",{"type":10,"value":34028,"toc":34288},[34029,34031,34043,34047,34049,34057,34060,34063,34066,34070,34077,34080,34083,34086,34094,34097,34101,34104,34108,34114,34273,34276,34282,34285],[32,34030],{},[16,34032,34033,34034,34036,34037,33193,34039,33607,34041,33199],{},"title: Bootstrap with LESS (Part 2)",[1118,34035],{},"\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",[1118,34038],{},[1118,34040],{},[1118,34042],{},[48,34044,34045],{},[51,34046,8994],{},[32,34048],{},[16,34050,34051,34052,34056],{},"Ok, so how did css become so complex and what the heck is ",[1139,34053,34055],{"href":34054},"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.",[16,34058,34059],{},"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.",[16,34061,34062],{},"1.) Create Empty MVC project",[16,34064,34065],{},"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)",[156,34067],{"src":34068,"border":8404,"alt":34069,"title":34069},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-solutionexplorer_thumb.jpg","solutionexplorer",[16,34071,34072,34073,34076],{},"3.) Ensure you have ",[1139,34074,34075],{"href":33937},"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.",[16,34078,34079],{},"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.",[16,34081,34082],{},"5.) At the command prompt > grunt (this will execute all tasks and run the tests)",[16,34084,34085],{},"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.",[16,34087,34088,34089,34093],{},"7.) Download install the ",[1139,34090,34092],{"href":34091},"https:\u002F\u002Fvisualstudiogallery.msdn.microsoft.com\u002F8e1b4368-4afb-467a-bc13-9650572db708","Task Runner Explorer"," extension as well.",[16,34095,34096],{},"8.) Open the MVC project and right click on Gruntfile.js  You will see a new option.",[156,34098],{"src":34099,"border":8404,"alt":34100,"title":34100,"width":8473,"height":13519},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-taskrunner_thumb.jpg","taskrunner",[16,34102,34103],{},"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.",[156,34105],{"src":34106,"border":8404,"alt":34107,"title":34107,"width":8473,"height":12953},"\u002Farticles\u002Fimages\u002Fwindows-live-writer-bootstrap-with-less-part-2_715f-taskrunner_2_thumb.jpg","taskrunner_2",[16,34109,34110,34111,34113],{},"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.",[1118,34112],{},"\nAt this point, I opened gruntfile.js.  I am going to extend the current copy task to include a copyToServer option.",[2232,34115,34117],{"className":11592,"code":34116,"language":11594,"meta":1080,"style":1080},"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",[2239,34118,34119,34124,34131,34142,34155,34160,34165,34170,34175,34180,34185,34193,34200,34210,34214,34221,34232,34244,34258,34263,34268],{"__ignoreMap":1080},[4215,34120,34121],{"class":4217,"line":4218},[4215,34122,34123],{"class":8259},"copy: {\n",[4215,34125,34126,34129],{"class":4217,"line":1081},[4215,34127,34128],{"class":8665},"  fonts",[4215,34130,9910],{"class":8259},[4215,34132,34133,34136,34138,34140],{"class":4217,"line":1084},[4215,34134,34135],{"class":8665},"    expand",[4215,34137,3087],{"class":8259},[4215,34139,15236],{"class":8255},[4215,34141,15766],{"class":8259},[4215,34143,34144,34147,34149,34152],{"class":4217,"line":4234},[4215,34145,34146],{"class":8665},"    src",[4215,34148,3087],{"class":8259},[4215,34150,34151],{"class":8665},"'fonts",[4215,34153,34154],{"class":8249},"\u002F*',\n",[4215,34156,34157],{"class":4217,"line":4240},[4215,34158,34159],{"class":8249},"    dest: 'dist\u002F'\n",[4215,34161,34162],{"class":4217,"line":4246},[4215,34163,34164],{"class":8249},"  },\n",[4215,34166,34167],{"class":4217,"line":4252},[4215,34168,34169],{"class":8249},"  docs: {\n",[4215,34171,34172],{"class":4217,"line":4258},[4215,34173,34174],{"class":8249},"    expand: true,\n",[4215,34176,34177],{"class":4217,"line":4264},[4215,34178,34179],{"class":8249},"    cwd: 'dist\u002F',\n",[4215,34181,34182],{"class":4217,"line":4270},[4215,34183,34184],{"class":8249},"    src: [\n",[4215,34186,34187,34190],{"class":4217,"line":4276},[4215,34188,34189],{"class":8249},"      '**\u002F",[4215,34191,34192],{"class":8665},"*'\n",[4215,34194,34195,34198],{"class":4217,"line":4282},[4215,34196,34197],{"class":8665},"    ]",[4215,34199,15766],{"class":8259},[4215,34201,34202,34205,34207],{"class":4217,"line":4288},[4215,34203,34204],{"class":8665},"    dest",[4215,34206,3087],{"class":8259},[4215,34208,34209],{"class":8665},"'docs\u002Fdist\u002F'\n",[4215,34211,34212],{"class":4217,"line":4294},[4215,34213,34164],{"class":8259},[4215,34215,34216,34219],{"class":4217,"line":4300},[4215,34217,34218],{"class":8665}," copyToServer",[4215,34220,9910],{"class":8259},[4215,34222,34223,34226,34228,34230],{"class":4217,"line":4306},[4215,34224,34225],{"class":8665},"      expand",[4215,34227,3087],{"class":8259},[4215,34229,15236],{"class":8255},[4215,34231,15766],{"class":8259},[4215,34233,34234,34237,34239,34242],{"class":4217,"line":4312},[4215,34235,34236],{"class":8665},"      cwd",[4215,34238,3087],{"class":8259},[4215,34240,34241],{"class":8665},"'dist\u002F'",[4215,34243,15766],{"class":8259},[4215,34245,34246,34249,34252,34255],{"class":4217,"line":4318},[4215,34247,34248],{"class":8665},"      src",[4215,34250,34251],{"class":8259},": [",[4215,34253,34254],{"class":8665},"'**",[4215,34256,34257],{"class":8249},"\u002F*'],\n",[4215,34259,34260],{"class":4217,"line":4324},[4215,34261,34262],{"class":8249},"      dest: 'c:\u002Finetpub\u002Fwwwroot\u002Fserver\u002Fstylesheets\u002Fbootstrap\u002F'\n",[4215,34264,34265],{"class":4217,"line":4330},[4215,34266,34267],{"class":8249},"  }\n",[4215,34269,34270],{"class":4217,"line":4336},[4215,34271,34272],{"class":8249},"},\n",[16,34274,34275],{},"I also added a new task so that I could execute this after a build with",[16,34277,34278,34279,24433],{},"\u002F\u002F new copy to server or local vdir\n  grunt.registerTask('copyToServer', ",[4215,34280,34281],{},"'copy:copyToServer'",[16,34283,34284],{},"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.",[4682,34286,34287],{},"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":1080,"searchDepth":1081,"depth":1081,"links":34289},[],"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":34290},"articles\u002Fbootstrap-with-less-part-2","mPxMED8Q645tR3tafSYbNmj55ZL7zdCq0B-mTtudJ98",{"id":34297,"title":34298,"author":1915,"body":34299,"createdAt":1915,"description":34347,"extension":1101,"img":1915,"meta":34348,"navigation":1104,"path":34349,"seo":34350,"stem":34351,"tags":1915,"updatedAt":1915,"__hash__":34352},"articles\u002Farticles\u002Fnew-blog-engine-static.md","New Blog Engine Static",{"type":10,"value":34300,"toc":34345},[34301,34303,34310,34314,34316,34329,34334,34337],[32,34302],{},[16,34304,34305,34306,33196,34308,33199],{},"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:",[1118,34307],{},[1118,34309],{},[48,34311,34312],{},[51,34313,20377],{},[32,34315],{},[16,34317,34318,34319,34323,34324,34328],{},"Yes I am updating blog and web site as part of personal brand update.  I have been hosting on ",[1139,34320,34322],{"href":34321,"target":1142},"https:\u002F\u002Fwww.a2hosting.com\u002F","A2 Hosting","\nfor the last few years.  Recently, they sold their Windows hosting to ",[1139,34325,34327],{"href":34326,"target":1142},"https:\u002F\u002Fwww.mochahost.com\u002F","Mochahost","  While service and uptime has improved there are other much lower cost alternatives.",[16,34330,34331],{},[156,34332],{"alt":1080,"src":34333},"\u002Farticles\u002Fimages\u002Fkramer.png",[16,34335,34336],{},"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.",[16,34338,34339,34340,34344],{},"I decided to invest in the ",[1139,34341,34343],{"target":1142,"href":34342},"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":1080,"searchDepth":1081,"depth":1081,"links":34346},[],"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:",{},"\u002Farticles\u002Fnew-blog-engine-static",{"description":34347},"articles\u002Fnew-blog-engine-static","A5bAV-jKLqEpJpj3LibYl2gI4xq66-qtVBQONxX4Ra8",{"id":34354,"title":34355,"author":1915,"body":34356,"createdAt":1915,"description":34411,"extension":1101,"img":1915,"meta":34412,"navigation":1104,"path":34413,"seo":34414,"stem":34415,"tags":1915,"updatedAt":1915,"__hash__":34416},"articles\u002Farticles\u002Fnew-blog-engine-subtext.md","New Blog Engine Subtext",{"type":10,"value":34357,"toc":34409},[34358,34360,34370,34374,34376,34382,34397,34400],[32,34359],{},[16,34361,34362,34363,34365,34366,33196,34368,33199],{},"title: New Blog Engine - Subtext",[1118,34364],{},"\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:",[1118,34367],{},[1118,34369],{},[48,34371,34372],{},[51,34373,20377],{},[32,34375],{},[16,34377,34378,34379,34381],{},"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.",[1118,34380],{},"\nI really wanted a stable blog engine at this point.  Subtext setup was very easy and so far has been rock solid. ",[16,34383,34384,34385,14501,34387,34389,34390,34393,34396],{},"Good job with this.",[1118,34386],{},[1118,34388],{},"\nMy old blog at ",[1139,34391],{"title":34392,"href":34392},"http:\u002F\u002Fdyardy.spaces.live.com\u002F",[1139,34394,34392],{"href":34392,"rel":34395},[3695]," still lives for the time being as I make the transition. ",[16,34398,34399],{},"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.",[16,34401,34402,34403,34406],{},"Please update your RSS feeds to ",[1139,34404],{"title":34405,"href":34405},"http:\u002F\u002Ffeeds.feedburner.com\u002Fdavidyardy",[1139,34407,34405],{"href":34405,"rel":34408},[3695],{"title":1080,"searchDepth":1081,"depth":1081,"links":34410},[],"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":34411},"articles\u002Fnew-blog-engine-subtext","qrip7XgFl5rX2I6K69lQ9z1SeJfRd-Sx3Raf3S3By3E",{"id":34418,"title":34419,"author":1915,"body":34420,"createdAt":1915,"description":34503,"extension":1101,"img":1915,"meta":34504,"navigation":1104,"path":34505,"seo":34506,"stem":34507,"tags":1915,"updatedAt":1915,"__hash__":34508},"articles\u002Farticles\u002Fpermissons-for-pem-are-too-open.md","Permissons For Pem Are Too Open",{"type":10,"value":34421,"toc":34501},[34422,34424,34430,34437,34439,34442,34445,34451,34457,34466,34469,34474,34479,34484,34492],[32,34423],{},[16,34425,34426,34427,34429],{},"title: Permissions for .pem are too open\ndescription: While connecting to Azure VM via SSH came across a series of stumbling blocks and hence the series of blog posts as documentation of the learning curve.  This may help others.\ncreatedAt: 2020-11-15T17:16:19.541Z\nupdatedAt: 2020-11-15T17:16:19.541Z\nimg: \u002Farticles\u002Fimages\u002Fimage_thumb_637410573794423074.png\nauthor:",[1118,34428],{},"\nname: Admin\ntags:",[48,34431,34432,34434],{},[51,34433,5087],{},[51,34435,34436],{},"linux",[32,34438],{},[16,34440,34441],{},"While connecting to Azure VM via SSH came across a series of stumbling blocks and hence the series of blog posts as documentation of the learning curve.  This may help others.",[16,34443,34444],{},"Connecting to newly created Azure VM via SSH came across the error surrounding permissions on my pem file ",[16,34446,34447,34448,23497],{},"PS c:\\>ssh –i {pathtopemfile}.pem ",[1139,34449,34450],{},"mailto:azureuser@{ipaddress",[16,34452,34453,34454,34456],{},"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ",[1118,34455],{},"\nWARNING: UNPROTECTED PRIVATE KEY FILE!          @ \n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",[16,34458,34459,34460,34462,34463,34465],{},"Permissions for '{filename}.pem' are too open. ",[1118,34461],{}," It is required that your private key files are NOT accessible by others. ",[1118,34464],{}," This private key will be ignored.",[16,34467,34468],{},"You locate the file in Windows Explorer, right-click on it then select \"Properties\". Navigate to the \"Security\" tab and click \"Advanced\".",[16,34470,34471],{},[19,34472,34473],{},"a) Change the owner to you",[16,34475,34476,1200],{},[19,34477,34478],{},"b) Disable inheritance and delete all permissions",[16,34480,34481],{},[19,34482,34483],{},"c) Then grant yourself \"Full control\"",[16,34485,34486,34487,11776,34489,34491],{},"and save the permissions. ",[1118,34488],{},[1118,34490],{},"Now SSH won't complain about file permission too open anymore.  It should look like the following",[16,34493,34494],{},[34495,34496,34498],"nuxt-link",{"to":34497,"target":1142},"\u002Farticles\u002Fimages\u002Fimage_637410573793339622.png",[156,34499],{"title":158,"src":34500,"alt":158},"\u002Farticles\u002Fimages\u002Fimage_thumb_637410573794423074.png",{"title":1080,"searchDepth":1081,"depth":1081,"links":34502},[],"title: Permissions for .pem are too open\ndescription: While connecting to Azure VM via SSH came across a series of stumbling blocks and hence the series of blog posts as documentation of the learning curve.  This may help others.\ncreatedAt: 2020-11-15T17:16:19.541Z\nupdatedAt: 2020-11-15T17:16:19.541Z\nimg: \u002Farticles\u002Fimages\u002Fimage_thumb_637410573794423074.png\nauthor:\nname: Admin\ntags:",{},"\u002Farticles\u002Fpermissons-for-pem-are-too-open",{"description":34503},"articles\u002Fpermissons-for-pem-are-too-open","V7ftko28lhDN_8wAJbdGkEZGdAfehpZJR2L9xHihGNQ",{"id":34510,"title":34511,"author":1915,"body":34512,"createdAt":1915,"description":34572,"extension":1101,"img":1915,"meta":34573,"navigation":1104,"path":34574,"seo":34575,"stem":34576,"tags":1915,"updatedAt":1915,"__hash__":34577},"articles\u002Farticles\u002Fsubtext-stuff-to-know.md","Subtext Stuff To Know",{"type":10,"value":34513,"toc":34570},[34514,34516,34526,34530,34532,34535,34538,34553,34556],[32,34515],{},[16,34517,34518,34519,34521,34522,33196,34524,33199],{},"title: SubText Stuff to Know",[1118,34520],{},"\ndescription: Windows Live Writer and MetaBlogApi\ncreatedAt: 2015-04-20T08:07:20.6200000-04:00\nupdatedAt: 2015-04-20T08:07:20.6200000-04:00\nimg: \u002Farticles\u002Fimages\u002FSubtextLogo.png\nauthor:",[1118,34523],{},[1118,34525],{},[48,34527,34528],{},[51,34529,20377],{},[32,34531],{},[16,34533,34534],{},"When connecting Windows Live Writer use select MetaBlogApi and the following link  href=\"http:\u002F\u002F{domain}\u002F{memberName}\u002Fservices\u002FMetaBlogAPI.aspx",[16,34536,34537],{},"If you have difficulties uploading images ensure that your IIS account has Full Permissions under the images directory",[16,34539,34540,34541,34544,34545,34548,34552],{},"When I moved my blog from ",[1139,34542,34543],{"href":34543},"http:\u002F\u002F{domain}.com\u002F"," to ",[1139,34546],{"href":34547},"http:\u002F\u002Fblog.{domain}.com",[1139,34549,34547],{"href":34550,"rel":34551},"http:\u002F\u002Fblog.%7Bdomain%7D.com",[3695]," I was required to update the Host field in the sql table subtext_config.  Once I updated the field all things worked just fine.",[16,34554,34555],{},"Other Resources",[48,34557,34558,34564],{},[51,34559,34560],{},[1139,34561,34563],{"target":1142,"href":34562},"http:\u002F\u002Fblog-howto.com\u002Farchive\u002F2006\u002F09\u002F15\u002FFilePermissionsForImageUploading.aspx","Blog-HowTo.com",[51,34565,34566],{},[1139,34567,34569],{"target":1142,"href":34568},"http:\u002F\u002Fwww.superjason.com\u002Farchive\u002F2007\u002F09\u002F07\u002Fuploading-images-to-subtext-with-windows-live-writer.aspx","SuperJason’s Blog",{"title":1080,"searchDepth":1081,"depth":1081,"links":34571},[],"title: SubText Stuff to Know\ndescription: Windows Live Writer and MetaBlogApi\ncreatedAt: 2015-04-20T08:07:20.6200000-04:00\nupdatedAt: 2015-04-20T08:07:20.6200000-04:00\nimg: \u002Farticles\u002Fimages\u002FSubtextLogo.png\nauthor:\nname: Admin\ntags:",{},"\u002Farticles\u002Fsubtext-stuff-to-know",{"description":34572},"articles\u002Fsubtext-stuff-to-know","EQ5g6H96D-dA9hwOn2IAOUjTZaOO2wjuX1T40wzegsQ",[34579,34593,34606,34619,34632,34645,34658,34671,34683,34696,34709,34722,34734,34747,34760,34773,34786,34798,34811,34824,34836,34849,34862,34875,34889,34902,34915,34929,34942,34955,34968,34981,34994,35007,35019,35032,35045,35058,35071,35084,35097],{"id":34580,"title":34581,"body":34582,"description":34586,"extension":1101,"img":34587,"meta":34588,"name":10685,"navigation":1104,"path":34589,"seo":34590,"stem":34591,"__hash__":34592},"tags\u002Ftags\u002Fangular.md","Angular",{"type":10,"value":34583,"toc":34584},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34585},[],"Angular is a platform and framework for building single-page client applications using HTML and TypeScript. Angular is written in TypeScript. It implements core and optional functionality as a set of TypeScript libraries that you import into your apps.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1598313183973-4effcded8d5e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80",{},"\u002Ftags\u002Fangular",{"description":34586},"tags\u002Fangular","eoDcAD3OtoeAOkBSGo8g8j_VXyVw7KjxglMdE7-YP0Y",{"id":34594,"title":34595,"body":34596,"description":34600,"extension":1101,"img":34587,"meta":34601,"name":19958,"navigation":1104,"path":34602,"seo":34603,"stem":34604,"__hash__":34605},"tags\u002Ftags\u002Fapple.md","Apple",{"type":10,"value":34597,"toc":34598},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34599},[],"Apple\u002FIOS",{},"\u002Ftags\u002Fapple",{"description":34600},"tags\u002Fapple","0Exim4CeOLkVQz9UtqDk0o6ShWgVpP1WWmim9P8S3AY",{"id":34607,"title":34608,"body":34609,"description":34613,"extension":1101,"img":34587,"meta":34614,"name":8994,"navigation":1104,"path":34615,"seo":34616,"stem":34617,"__hash__":34618},"tags\u002Ftags\u002Faspnet.md","Aspnet",{"type":10,"value":34610,"toc":34611},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34612},[],"ASP.NET is an open source web framework, created by Microsoft, for building modern web apps and services with .NET.",{},"\u002Ftags\u002Faspnet",{"description":34613},"tags\u002Faspnet","SlUGLdZWQy8mYOWC6OetgJkwVulWNURoVHeuESIDleI",{"id":34620,"title":34621,"body":34622,"description":34626,"extension":1101,"img":34587,"meta":34627,"name":10633,"navigation":1104,"path":34628,"seo":34629,"stem":34630,"__hash__":34631},"tags\u002Ftags\u002Fauthentication.md","Authentication",{"type":10,"value":34623,"toc":34624},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34625},[],"OAuth definition OAuth is an open-standard authorization protocol or framework that describes how unrelated servers and services can safely allow authenticated access to their assets without actually sharing the initial, related, single logon credential.",{},"\u002Ftags\u002Fauthentication",{"description":34626},"tags\u002Fauthentication","_8T06qDTgOUmS90agK3hCtpIqsbig8JcZkl5g2N1H9A",{"id":34633,"title":34634,"body":34635,"description":34639,"extension":1101,"img":34587,"meta":34640,"name":5087,"navigation":1104,"path":34641,"seo":34642,"stem":34643,"__hash__":34644},"tags\u002Ftags\u002Fazure.md","Azure",{"type":10,"value":34636,"toc":34637},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34638},[],"Azure cloud platform is more than 200 products and cloud services designed to help you bring new solutions to life",{},"\u002Ftags\u002Fazure",{"description":34639},"tags\u002Fazure","m01ax_ShM5MuWl7UByoMyql_zrDRu_4udP4MyD4fL-k",{"id":34646,"title":34647,"body":34648,"description":34652,"extension":1101,"img":34587,"meta":34653,"name":11234,"navigation":1104,"path":34654,"seo":34655,"stem":34656,"__hash__":34657},"tags\u002Ftags\u002Fblog.md","Blog",{"type":10,"value":34649,"toc":34650},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34651},[],"Blogging Technology",{},"\u002Ftags\u002Fblog",{"description":34652},"tags\u002Fblog","nE38cM_1Eufot6IR1bSPt8pj0Ia8rxw1u5t6hTj_Ies",{"id":34659,"title":34660,"body":34661,"description":34660,"extension":1101,"img":34665,"meta":34666,"name":1109,"navigation":1104,"path":34667,"seo":34668,"stem":34669,"__hash__":34670},"tags\u002Ftags\u002Fbusiness.md","Business",{"type":10,"value":34662,"toc":34663},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34664},[],"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1520607162513-77705c0f0d4a?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2669&q=80",{},"\u002Ftags\u002Fbusiness",{"description":34660},"tags\u002Fbusiness","YdMyafDBIp-jap3kCKKSZ_CX1by_dF8ZiyktTtMYsjE",{"id":34672,"title":34673,"body":34674,"description":1915,"extension":1101,"img":34587,"meta":34678,"name":8723,"navigation":1104,"path":34679,"seo":34680,"stem":34681,"__hash__":34682},"tags\u002Ftags\u002Fcsharp.md","Csharp",{"type":10,"value":34675,"toc":34676},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34677},[],{},"\u002Ftags\u002Fcsharp",{"description":1915},"tags\u002Fcsharp","q__D01bgRc46igktetL1XSIb0CS3jpaQOtnTfdNZJyQ",{"id":34684,"title":34685,"body":34686,"description":34690,"extension":1101,"img":34587,"meta":34691,"name":30675,"navigation":1104,"path":34692,"seo":34693,"stem":34694,"__hash__":34695},"tags\u002Ftags\u002Fcss.md","Css",{"type":10,"value":34687,"toc":34688},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34689},[],"CSS stands for Cascading Style Sheets",{},"\u002Ftags\u002Fcss",{"description":34690},"tags\u002Fcss","ggXkbtLIhvz3_ft5BeNoohjKlpz214tWuYhcNhqv49g",{"id":34697,"title":34698,"body":34699,"description":34703,"extension":1101,"img":34587,"meta":34704,"name":21527,"navigation":1104,"path":34705,"seo":34706,"stem":34707,"__hash__":34708},"tags\u002Ftags\u002Fenterpriselibrary.md","Enterpriselibrary",{"type":10,"value":34700,"toc":34701},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34702},[],"Enterprise Library (not to be confused by Entity Framework)",{},"\u002Ftags\u002Fenterpriselibrary",{"description":34703},"tags\u002Fenterpriselibrary","8K38ejjAJwlBSzEmuwI8cDmMUOLiuGbh7qKzUcvirIo",{"id":34710,"title":34711,"body":34712,"description":34716,"extension":1101,"img":34587,"meta":34717,"name":16966,"navigation":1104,"path":34718,"seo":34719,"stem":34720,"__hash__":34721},"tags\u002Ftags\u002Fentityframework.md","Entityframework",{"type":10,"value":34713,"toc":34714},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34715},[],"Entity Framework is an open-source ORM framework for .NET applications supported by Microsoft. It enables developers to work with data using objects of domain specific classes without focusing on the underlying database tables and columns where this data is stored.",{},"\u002Ftags\u002Fentityframework",{"description":34716},"tags\u002Fentityframework","OUnoZJoIvU2LISfVORR0X4iRDBwmF8VkIoyT75FfFJw",{"id":34723,"title":5814,"body":34724,"description":34728,"extension":1101,"img":34587,"meta":34729,"name":6907,"navigation":1104,"path":34730,"seo":34731,"stem":34732,"__hash__":34733},"tags\u002Ftags\u002Fflutter.md",{"type":10,"value":34725,"toc":34726},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34727},[],"Flutter SDK is Google's UI toolkit for crafting beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.",{},"\u002Ftags\u002Fflutter",{"description":34728},"tags\u002Fflutter","9lY6efG0wl_9qbC_N3ABqlg6pCSWlTRgJqo_PHk8rUM",{"id":34735,"title":34736,"body":34737,"description":34741,"extension":1101,"img":34587,"meta":34742,"name":20377,"navigation":1104,"path":34743,"seo":34744,"stem":34745,"__hash__":34746},"tags\u002Ftags\u002Fgeneral.md","General",{"type":10,"value":34738,"toc":34739},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34740},[],"General Stuff",{},"\u002Ftags\u002Fgeneral",{"description":34741},"tags\u002Fgeneral","LSqhMkbRmT9hGY0PBoSMbwcFNCUONu1khbAp-7vvuiA",{"id":34748,"title":34749,"body":34750,"description":34754,"extension":1101,"img":34587,"meta":34755,"name":5660,"navigation":1104,"path":34756,"seo":34757,"stem":34758,"__hash__":34759},"tags\u002Ftags\u002Fgit.md","Git",{"type":10,"value":34751,"toc":34752},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34753},[],"By far, the most widely used modern version control system in the world today is Git. Git is a mature, actively maintained open source project originally developed in 2005 by Linus Torvalds, the famous creator of the Linux operating system kernel.",{},"\u002Ftags\u002Fgit",{"description":34754},"tags\u002Fgit","U1tw1upYV8fS54zcAcO9NtXP-eTFSmtnUnkUMo_QBY0",{"id":34761,"title":34762,"body":34763,"description":34767,"extension":1101,"img":34587,"meta":34768,"name":8650,"navigation":1104,"path":34769,"seo":34770,"stem":34771,"__hash__":34772},"tags\u002Ftags\u002Fhtml.md","Html",{"type":10,"value":34764,"toc":34765},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34766},[],"HTML",{},"\u002Ftags\u002Fhtml",{"description":34767},"tags\u002Fhtml","XplOeFNlW_OhQTIuz7qpRvyCeTnPXLd6lB0N8j7go0Y",{"id":34774,"title":32062,"body":34775,"description":34779,"extension":1101,"img":34780,"meta":34781,"name":5166,"navigation":1104,"path":34782,"seo":34783,"stem":34784,"__hash__":34785},"tags\u002Ftags\u002Fjavascript.md",{"type":10,"value":34776,"toc":34777},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34778},[],"JavaScript is a programming language adhering to the ECMAScript spec.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1598425237654-4fc758e50a93?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80",{},"\u002Ftags\u002Fjavascript",{"description":34779},"tags\u002Fjavascript","wqzmOtgcvcAeeB0QinMxw2OqnSglrJN0TeWQ-fulunM",{"id":34787,"title":34788,"body":34789,"description":10312,"extension":1101,"img":34587,"meta":34793,"name":10312,"navigation":1104,"path":34794,"seo":34795,"stem":34796,"__hash__":34797},"tags\u002Ftags\u002Fjetbrains.md","Jetbrains",{"type":10,"value":34790,"toc":34791},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34792},[],{},"\u002Ftags\u002Fjetbrains",{"description":10312},"tags\u002Fjetbrains","VQo0-2191Z0vfDLqdLcpQeoie072asyvQ5I92OHyd5c",{"id":34799,"title":34800,"body":34801,"description":34805,"extension":1101,"img":34587,"meta":34806,"name":22974,"navigation":1104,"path":34807,"seo":34808,"stem":34809,"__hash__":34810},"tags\u002Ftags\u002Fknockout.md","Knockout",{"type":10,"value":34802,"toc":34803},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34804},[],"JavaScript framework",{},"\u002Ftags\u002Fknockout",{"description":34805},"tags\u002Fknockout","zVw-nWiaWRnCgH0G-z-_kVZ_fXxO_B2DQTIErQ1Y0ho",{"id":34812,"title":34813,"body":34814,"description":34818,"extension":1101,"img":34587,"meta":34819,"name":20263,"navigation":1104,"path":34820,"seo":34821,"stem":34822,"__hash__":34823},"tags\u002Ftags\u002Flinq.md","Linq",{"type":10,"value":34815,"toc":34816},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34817},[],"LINQ (Language Integrated Query) is uniform query syntax in C# and VB.NET to retrieve data from different sources and formats.",{},"\u002Ftags\u002Flinq",{"description":34818},"tags\u002Flinq","DahUeq8OFwHrk8nQjk2ZvNi21SiU7fmxAA7cvaCJh94",{"id":34825,"title":34826,"body":34827,"description":1915,"extension":1101,"img":34587,"meta":34831,"name":34436,"navigation":1104,"path":34832,"seo":34833,"stem":34834,"__hash__":34835},"tags\u002Ftags\u002Flinux.md","Linux",{"type":10,"value":34828,"toc":34829},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34830},[],{},"\u002Ftags\u002Flinux",{"description":1915},"tags\u002Flinux","GkoCiqkmCTuEHudMoZGcsu1ZeFqXWrtyvjGLKlpf_tM",{"id":34837,"title":34838,"body":34839,"description":34843,"extension":1101,"img":34587,"meta":34844,"name":10632,"navigation":1104,"path":34845,"seo":34846,"stem":34847,"__hash__":34848},"tags\u002Ftags\u002Fnetcore.md","Netcore",{"type":10,"value":34840,"toc":34841},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34842},[],".NET Core is a new version of .NET Framework, which is a free, open-source, general-purpose development platform maintained by Microsoft. It is a cross-platform framework that runs on Windows, macOS, and Linux operating systems.",{},"\u002Ftags\u002Fnetcore",{"description":34843},"tags\u002Fnetcore","D5BWCPpKVXJTUKU0TRuD3sWQ9rXtqETGkxzHAK__g5w",{"id":34850,"title":34851,"body":34852,"description":34856,"extension":1101,"img":34587,"meta":34857,"name":6989,"navigation":1104,"path":34858,"seo":34859,"stem":34860,"__hash__":34861},"tags\u002Ftags\u002Fnode.md","Node",{"type":10,"value":34853,"toc":34854},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34855},[],"Node allows developers to write JavaScript code that runs directly in a computer process itself instead of in a browser. Node can, therefore, be used to write server-side applications with access to the operating system, file system, and everything else required to build fully-functional applications.",{},"\u002Ftags\u002Fnode",{"description":34856},"tags\u002Fnode","kBZEUEYUGIoLCPM88yi6RG1QD8TIc4JbSwgSFvC1_Gc",{"id":34863,"title":34864,"body":34865,"description":34869,"extension":1101,"img":34587,"meta":34870,"name":6990,"navigation":1104,"path":34871,"seo":34872,"stem":34873,"__hash__":34874},"tags\u002Ftags\u002Fnpm.md","Npm",{"type":10,"value":34866,"toc":34867},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34868},[],"npm is two things... first and foremost, it is an online repository for the publishing of open-source Node.js projects; second, it is a command-line utility for interacting with said repository that aids in package installation, version management, and dependency management.",{},"\u002Ftags\u002Fnpm",{"description":34869},"tags\u002Fnpm","lIC-Oaulb8LKEOVAMw2ea29_Ir9k8IMaGOx8do5mHaI",{"id":34876,"title":34877,"body":34878,"description":34882,"extension":1101,"img":34587,"meta":34883,"name":34884,"navigation":1104,"path":34885,"seo":34886,"stem":34887,"__hash__":34888},"tags\u002Ftags\u002Fnuxtjs.md","Nuxtjs",{"type":10,"value":34879,"toc":34880},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34881},[],"NuxtJS is an open source framework making web development simple and powerful.",{},"nuxtjs","\u002Ftags\u002Fnuxtjs",{"description":34882},"tags\u002Fnuxtjs","l5aVvgA2f8nRSP-gvcRgOx-8rwtonh6Rh3q6o-TBs24",{"id":34890,"title":34891,"body":34892,"description":34896,"extension":1101,"img":34587,"meta":34897,"name":10634,"navigation":1104,"path":34898,"seo":34899,"stem":34900,"__hash__":34901},"tags\u002Ftags\u002Fopenid.md","Openid",{"type":10,"value":34893,"toc":34894},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34895},[],"openid, oauth",{},"\u002Ftags\u002Fopenid",{"description":34896},"tags\u002Fopenid","fnD9ug9u_g4AFOzLY14RqGvvBJuDk-n1o2RCO1i99aY",{"id":34903,"title":34904,"body":34905,"description":34909,"extension":1101,"img":34587,"meta":34910,"name":12153,"navigation":1104,"path":34911,"seo":34912,"stem":34913,"__hash__":34914},"tags\u002Ftags\u002Fproductreview.md","Productreview",{"type":10,"value":34906,"toc":34907},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34908},[],"You can trust our in-depth technology reviews to help you buy the best product for your needs.",{},"\u002Ftags\u002Fproductreview",{"description":34909},"tags\u002Fproductreview","QWuQ6OCE-GPj2FsnBT3Y0ZrbPceqOMsVbPLMErNCgz0",{"id":34916,"title":34917,"body":34918,"description":34922,"extension":1101,"img":34923,"meta":34924,"name":7620,"navigation":1104,"path":34925,"seo":34926,"stem":34927,"__hash__":34928},"tags\u002Ftags\u002Fselfimprovement.md","Selfimprovement",{"type":10,"value":34919,"toc":34920},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34921},[],"As a passionate advocate of growth, I’m continuously looking for ways to self-improve.  I hope to add articles that have helped me achieve my growth and goals.","https:\u002F\u002Fimages.unsplash.com\u002Fuploads\u002F14116603688211a68546c\u002F30f8f30b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80",{},"\u002Ftags\u002Fselfimprovement",{"description":34922},"tags\u002Fselfimprovement","toyL3Irf3kjbRLtLzwarSPYsMsy_I9_UaODXVFbc9pQ",{"id":34930,"title":34931,"body":34932,"description":34936,"extension":1101,"img":34587,"meta":34937,"name":15562,"navigation":1104,"path":34938,"seo":34939,"stem":34940,"__hash__":34941},"tags\u002Ftags\u002Fsharepoint.md","Sharepoint",{"type":10,"value":34933,"toc":34934},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34935},[],"Microsoft SharePoint",{},"\u002Ftags\u002Fsharepoint",{"description":34936},"tags\u002Fsharepoint","1yMA-SLjOHmy0x6_m2U0v9b58OVV2Jg1i0vhgXavZ7M",{"id":34943,"title":34944,"body":34945,"description":34949,"extension":1101,"img":34587,"meta":34950,"name":30206,"navigation":1104,"path":34951,"seo":34952,"stem":34953,"__hash__":34954},"tags\u002Ftags\u002Fsilverlight.md","Silverlight",{"type":10,"value":34946,"toc":34947},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34948},[],"Say no more.",{},"\u002Ftags\u002Fsilverlight",{"description":34949},"tags\u002Fsilverlight","aLtzOSbx2leBhX5c__fGG4ZcqRvHO7p9rZCpLvRA0Bw",{"id":34956,"title":34957,"body":34958,"description":34962,"extension":1101,"img":34587,"meta":34963,"name":5661,"navigation":1104,"path":34964,"seo":34965,"stem":34966,"__hash__":34967},"tags\u002Ftags\u002Fsourcecontrol.md","Sourcecontrol",{"type":10,"value":34959,"toc":34960},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34961},[],"Source control refers to tracking and managing changes to code. This ensures that developers are always working on the right version of source code.",{},"\u002Ftags\u002Fsourcecontrol",{"description":34962},"tags\u002Fsourcecontrol","txFWQUvKfmOZSUyYKCc7uSDzQBPUHuUci03EOyNYfK8",{"id":34969,"title":34970,"body":34971,"description":34975,"extension":1101,"img":34587,"meta":34976,"name":7873,"navigation":1104,"path":34977,"seo":34978,"stem":34979,"__hash__":34980},"tags\u002Ftags\u002Fsql.md","Sql",{"type":10,"value":34972,"toc":34973},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34974},[],"SQL is a standard language designed for managing data in relational database management system. SQL stands for Structured Query Language. SQL is a standard programming language specifically designed for storing, retrieving, managing or manipulating the data inside a relational database management system (RDBMS).",{},"\u002Ftags\u002Fsql",{"description":34975},"tags\u002Fsql","HleFpAIKGUPMxp855dHtmfuv32MNyIbaOTi0ZjW_I1k",{"id":34982,"title":34983,"body":34984,"description":34988,"extension":1101,"img":34587,"meta":34989,"name":8743,"navigation":1104,"path":34990,"seo":34991,"stem":34992,"__hash__":34993},"tags\u002Ftags\u002Fsqlserver.md","Sqlserver",{"type":10,"value":34985,"toc":34986},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":34987},[],"SQL Server is a relational database management system, or RDBMS, developed and marketed by Microsoft.",{},"\u002Ftags\u002Fsqlserver",{"description":34988},"tags\u002Fsqlserver","pSzcNnE-XyUgq8RlgK2xBpbJV7_7o5NLS2XlwBxFyAg",{"id":34995,"title":34996,"body":34997,"description":35001,"extension":1101,"img":34587,"meta":35002,"name":10945,"navigation":1104,"path":35003,"seo":35004,"stem":35005,"__hash__":35006},"tags\u002Ftags\u002Fteamfoundationserver.md","Teamfoundationserver",{"type":10,"value":34998,"toc":34999},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35000},[],"Team Foundation Server (often abbreviated to TFS) is a Microsoft product that provides tools and technologies designed to help teams collaborate and orchestrate their efforts to finish projects or create a product. It enables DevOps capabilities covering the entire application lifecycle",{},"\u002Ftags\u002Fteamfoundationserver",{"description":35001},"tags\u002Fteamfoundationserver","CEZSgtqpsn_JuGubePK9lUUC42p0YpLGI5j3KuMwrSY",{"id":35008,"title":2604,"body":35009,"description":2604,"extension":1101,"img":35013,"meta":35014,"name":1110,"navigation":1104,"path":35015,"seo":35016,"stem":35017,"__hash__":35018},"tags\u002Ftags\u002Ftechnology.md",{"type":10,"value":35010,"toc":35011},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35012},[],"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1526666923127-b2970f64b422?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2672&q=80",{},"\u002Ftags\u002Ftechnology",{"description":2604},"tags\u002Ftechnology","-7li96dU6jkZP-VMu1mi86tqeJiPEdDCHzY8Bkipv0s",{"id":35020,"title":35021,"body":35022,"description":35026,"extension":1101,"img":34587,"meta":35027,"name":13812,"navigation":1104,"path":35028,"seo":35029,"stem":35030,"__hash__":35031},"tags\u002Ftags\u002Ftesting.md","Testing",{"type":10,"value":35023,"toc":35024},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35025},[],"A unit test is a way of testing a unit - the smallest piece of code that can be logically isolated in a system. In most programming languages, that is a function, a subroutine, a method or property. The isolated part of the definition is important.",{},"\u002Ftags\u002Ftesting",{"description":35026},"tags\u002Ftesting","Ff_w7mHDaTR4ynXul-ykC3R1NTVsYfPGk3aJjyr-GFM",{"id":35033,"title":35034,"body":35035,"description":35039,"extension":1101,"img":34587,"meta":35040,"name":4701,"navigation":1104,"path":35041,"seo":35042,"stem":35043,"__hash__":35044},"tags\u002Ftags\u002Ftools.md","Tools",{"type":10,"value":35036,"toc":35037},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35038},[],"Any sort of tip, script or function to make your job easier",{},"\u002Ftags\u002Ftools",{"description":35039},"tags\u002Ftools","o44aMhD358lxjNB-QBcxIrP7aURCo_L0OIiw3TTU3PY",{"id":35046,"title":35047,"body":35048,"description":35052,"extension":1101,"img":34587,"meta":35053,"name":8526,"navigation":1104,"path":35054,"seo":35055,"stem":35056,"__hash__":35057},"tags\u002Ftags\u002Fvisualstudio.md","Visualstudio",{"type":10,"value":35049,"toc":35050},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35051},[],"Develop apps for Android, iOS, Mac, Windows, web, and cloud",{},"\u002Ftags\u002Fvisualstudio",{"description":35052},"tags\u002Fvisualstudio","glm3bYyBlAXGun4NJe-CV_iOzhszydeBRIpbGNNLeEk",{"id":35059,"title":35060,"body":35061,"description":35039,"extension":1101,"img":35065,"meta":35066,"name":6307,"navigation":1104,"path":35067,"seo":35068,"stem":35069,"__hash__":35070},"tags\u002Ftags\u002Fvscode.md","Vscode",{"type":10,"value":35062,"toc":35063},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35064},[],"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1517694712202-14dd9538aa97?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1740&q=80",{},"\u002Ftags\u002Fvscode",{"description":35039},"tags\u002Fvscode","J_tiRB7xerEFvjI3iPoW1tEuy4QDO3i1Z7MLALXCmH4",{"id":35072,"title":35073,"body":35074,"description":35078,"extension":1101,"img":34587,"meta":35079,"name":8356,"navigation":1104,"path":35080,"seo":35081,"stem":35082,"__hash__":35083},"tags\u002Ftags\u002Fvuejs.md","Vuejs",{"type":10,"value":35075,"toc":35076},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35077},[],"Vue (pronounced \u002Fvjuː\u002F, like view) is a progressive framework for building user interfaces. Unlike other monolithic frameworks, Vue is designed from the ground up to be incrementally adoptable",{},"\u002Ftags\u002Fvuejs",{"description":35078},"tags\u002Fvuejs","FLzo8HD9QLE9FzBr4K8hRvB7QUPBQ4Ku-dpXQK90QZM",{"id":35085,"title":35086,"body":35087,"description":35091,"extension":1101,"img":34587,"meta":35092,"name":5455,"navigation":1104,"path":35093,"seo":35094,"stem":35095,"__hash__":35096},"tags\u002Ftags\u002Fweb.md","Web",{"type":10,"value":35088,"toc":35089},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35090},[],"Building, designing, maintaining websites and web services.",{},"\u002Ftags\u002Fweb",{"description":35091},"tags\u002Fweb","N0K1PTORhtFNif1cX9GMpY_yubD8Nbh_eQzi6w5GkEs",{"id":35098,"title":13869,"body":35099,"description":35103,"extension":1101,"img":34587,"meta":35104,"name":9200,"navigation":1104,"path":35105,"seo":35106,"stem":35107,"__hash__":35108},"tags\u002Ftags\u002Fxamarin.md",{"type":10,"value":35100,"toc":35101},[],{"title":1080,"searchDepth":1081,"depth":1081,"links":35102},[],"Xamarin is an open-source platform for building modern and performant applications for iOS, Android, and Windows with . NET. Xamarin is an abstraction layer that manages communication of shared code with underlying platform code.",{},"\u002Ftags\u002Fxamarin",{"description":35103},"tags\u002Fxamarin","deVB66I7cJMtWvqybFh5POf9LBCBwHNe-5ZGMOzV5G4",1781574756967]