[{"content":"All Things Open 2026 is on in Raleigh! With more than 100 sessions and speakers, choosing what to attend is not easy.\nI went through the conference program and shortlisted the sessions that caught my attention. My interests lean toward AI agents, software architecture, developer productivity, security, and data engineering, practical engineering challenges, along with a few interesting topics on model training, real-time AI, and emerging user interfaces.\nAI coding assistants have evolved considerably. We\u0026rsquo;re now moving toward autonomous agents that can modify repositories, execute commands, provision infrastructure, and even deploy applications. But giving an agent the ability to write code is relatively easy. Making it reliable, secure, efficient, and useful in a real engineering environment is a much harder problem.\nAI Coding Agents and Developer Infrastructure 1. Death by Worktree: Why Agent Sandboxes Choke on Disk I/O Speaker: Bradley Hilton\nWhy attend: Git worktrees and isolated sandboxes are becoming common approaches for running multiple coding agents concurrently. But filesystem performance can become a serious bottleneck. This session addresses an often-overlooked infrastructure problem: the I/O overhead associated with agent execution environments. Particularly relevant for anyone experimenting with parallel coding agents and multi-repository workflows.\n2. Building Functional Dev Environments for Humans and Agents Speaker: Matyas Danter — Staff Solutions Engineer, Coder\nWhy attend: AI agents need reproducible development environments just as much as human developers do. The talk explores practical approaches to managing development environments across monorepos, multiple repositories, and distributed teams.\n3. AI Sandboxes: Running Coding Agents Safely in Production-Grade Environments Speaker: Shivay Lamba — Lead ML Engineer, Qualcomm\nWhy attend: Coding agents execute commands and generate code that may not be entirely trustworthy. Sandboxing is becoming essential for safely scaling autonomous development.\n4. Sandboxing AI Agents in the Enterprise: A Practitioner\u0026rsquo;s Guide to Isolation Technologies Speaker: Balu Mathew — Machine Learning Engineering Technical Leader, Cisco\nWhy attend: An architectural perspective on isolation technologies for enterprise AI agents. I\u0026rsquo;m particularly interested in understanding the security, performance, and operational trade-offs between different sandboxing approaches.\n5. The Last Mile of AI-Assisted Development Speakers: Colin Griffin and David Johnson — Krumware / SUSE\nWhy attend: Generating code is only part of software delivery. Building, testing, deploying, and maintaining it remain substantial challenges. The session includes a look at extending Rancher using Epinio, an open-source Kubernetes application deployment platform. Worth considering for its practical platform-engineering angle, although the presentation has a vendor-specific component.\nAgent Security, Permissions, and Governance 6. You Can Give Any Agent Access to kubectl. But How Do You Make One That Should Have Access to kubectl? Speaker: Charles Johnson — Mezmo\nWhy attend: Connecting an agent to Kubernetes is easy; deciding whether it should be trusted with cluster operations is not. This session challenges the assumption that giving agents write access to production systems must inevitably end in disaster. An interesting opportunity to explore controlled autonomy, operational safeguards, and the boundary between agent capabilities and permissions.\n7. Fine-Grained Access Control for Hosted MCP Servers You Don\u0026rsquo;t Own Speaker: Nick Taylor — Developer Advocate, Pomerium\nWhy attend: One of the more practical security topics on my list. Nick demonstrates an identity-aware proxy that enforces per-tool authorization across hosted MCP servers without modifying them. The approach addresses credential sprawl, OAuth limitations, and tool-call auditing. Nick has presented extensively on MCP and Zero Trust security, including at Black Hat and other technical conferences. The demo uses open-source Pomerium.\n8. AI Wrote the Code – Is It Secure? Speaker: Adhithi Ravichandran — Founder and Software Consultant, Surya Consulting\nWhy attend: AI-generated code can introduce vulnerabilities even when it appears functionally correct. This session examines the security implications of AI-assisted software development. Adhithi\u0026rsquo;s software consulting background should offer a practitioner perspective on the security checks and engineering discipline needed before trusting AI-generated code in production.\nModel Training, Real-Time AI, and New Interfaces 9. The Beginners Guide to Training Your Own AI Coding Model on Your Own Data Speaker: Bekah Hawrot Weigel — The Paper Compute Company\nWhy attend: I\u0026rsquo;m particularly interested in small, specialized coding models trained on custom datasets. Understanding how to prepare training data and adapt a model for specific coding tasks is becoming increasingly valuable. This should be a useful introduction for developers exploring model customization beyond prompting and RAG.\n10. How Open is your Realtime AI Stack? Speaker: Omar Warraky — Senior Solutions Architect, LiveKit\nWhy attend: Real-time voice AI requires considerably more than an LLM. Speech recognition, synthesis, media transport, orchestration, and latency management all matter. This session should be particularly interesting for understanding the open-source components and architectural choices available when building low-latency conversational applications.\n11. Where Is My Futuristic App? Generative UI and the Open Future Speakers: Mark Techson, Andrew Brogdon, and Marc Dougherty — Google\nWhy attend: What happens when agents generate not just content but the user interface itself? This keynote explores Generative UI and the A2UI protocol, including a look at a working application\u0026rsquo;s codebase. Although Google-led, the focus on open protocols and actual implementation makes it worth watching.\n12. To Boldly Go: Data Science Exploration with AI Agents (ft Star Trek\u0026rsquo;s LCARS Theme) Speaker: Dawn Wages — Director, Community and Developer Relations, Anaconda\nWhy attend: A creative approach to exploring data science through AI agents, using Star Trek\u0026rsquo;s LCARS interface as inspiration. This looks like an enjoyable opportunity to see how conversational agents and interactive interfaces can make data exploration more approachable.\nSoftware Engineering and the Developer Community 13. When Code Costs Nothing: Tech Debt in the Age of GenAI Speaker: Rachel Stephens — Research Director, RedMonk\nWhy attend: AI dramatically reduces the effort required to produce code, but does it reduce the long-term cost of maintaining software? This session examines how generative AI changes our understanding of technical debt, code ownership, and engineering accountability. This session should bring an independent industry-research perspective, making this particularly appealing as a counterbalance to AI productivity hype.\n14. AI Tinkerers Raleigh: Top Demos of the Year and Their Community Impact Speaker: Danny Castro — AI Tinkerers Raleigh\nWhy attend: Sometimes the most interesting innovations come from local builders rather than major technology companies. This demo showcase highlights practical AI projects from the Raleigh community. A good opportunity to discover emerging tools, meet developers, and see what people are actually building.\nFinal Thoughts Looking across these sessions, a few important themes stand out:\nAgent infrastructure matters. Sandboxing, and reproducible environments are becoming fundamental building blocks of AI-assisted development. Security cannot depend on trusting the model. Permission boundaries, isolation, authorization, and auditing must be enforced outside the agent itself. The software engineering bottleneck is shifting. Generating code is becoming easier, while validation, maintainability, and production readiness remain difficult. See the complete All Things Open Tuesday schedule for session times and locations.\nLooking forward to seeing what the speakers and the open-source community have been working on!\n","permalink":"https://www.tewari.info/2026/10/19/all-things-open-2026-session-recommendations/","summary":"\u003cp\u003e\u003ca href=\"https://2026.allthingsopen.org/\"\u003eAll Things Open 2026\u003c/a\u003e is on in Raleigh! With more than 100 sessions and speakers, choosing what to attend is not easy.\u003c/p\u003e\n\u003cp\u003eI went through the conference program and shortlisted the sessions that caught my attention. My interests lean toward AI agents, software architecture, developer productivity, security, and data engineering, practical engineering challenges, along with a few interesting topics on model training, real-time AI, and emerging user interfaces.\u003c/p\u003e\n\u003cp\u003eAI coding assistants have evolved considerably. We\u0026rsquo;re now moving toward autonomous agents that can modify repositories, execute commands, provision infrastructure, and even deploy applications. But giving an agent the ability to write code is relatively easy. Making it reliable, secure, efficient, and useful in a real engineering environment is a much harder problem.\u003c/p\u003e","title":"All Things Open 2026 - Session Recommendations"},{"content":"Microsoft announced the new Surface Ultra RTX Laptop today. Of course I want the RTX Spark Machine! Who doesn\u0026rsquo;t? It is awesome! I am being nostalgic about my original Microsoft Surface Pro from 2013 though. I have fond memories of developing and testing Windows 8 Apps and Windows Phone Apps(remember those?) on it.\nThe spec sheet of my Surface Pro 1 from 2013 is ancient: 3rd-gen Intel Core i5, 4 GB of RAM, 128 GB SSD. Windows support ended years ago.\nI decided to wipe it and give it a new life with xubuntu.\nxubuntu 26.04 refused to boot at first. The culprit turned out to be the installation media rather than Linux: the Surface was hitting USB enumeration and read errors with my original flash drive. Safe graphics made no difference. A different stick, USB 2.0 this time, dropped me straight into the live environment. Live environment was extremely choppy and slow. I was able to complete some basic validations. I settled on xubuntu 24.04 LTS for the permanent install, and I will revisit 26.04 now that the basic setup works.\nThen the machine turned out to be more usable than I expected. Wi-Fi, Type Cover, and the Touch Screen all worked, and Firefox, Git, Python, terminals, SSH and lightweight dev tooling all run fine. XFCE and Ubuntu\u0026rsquo;s package ecosystem give me a current Linux environment that still leaves room to work in 4 GB of RAM. The Surface Pro\u0026rsquo;s compact form factor makes it light and portable next to my Lenovo Legion behemoth. The whole Surface Pro is probably lighter than the Legion\u0026rsquo;s power brick.\nI am not going to run local LLMs, a Kubernetes cluster or a dozen containers on it. As a small Linux terminal, SSH client, coding machine, browser or home-lab console, it has plenty of life left.\nI will be using it as a host for coding agents. The model runs in another local headless server (more on that in another blog post) or in the cloud, so what is left on this machine is an orchestration loop, HTTP calls, a git checkout and a shell, over tailscale. That is an I/O problem, and a 2013 i5 should do just fine. Headless over SSH, 4 GB should be enough. I\u0026rsquo;ll find out. The other appeal is blast radius. An agent that runs shell commands gets a cheap, disposable machine of its own instead of my main one.\nThere is something satisfying about taking hardware at the end of its commercial life and saving it from landfill.\n","permalink":"https://www.tewari.info/2026/10/07/who-needs-surface-ultra-rtx/","summary":"\u003cp\u003eMicrosoft announced the new \u003ca href=\"https://www.microsoft.com/en-us/surface/devices/surface-laptop-ultra\"\u003eSurface Ultra RTX Laptop\u003c/a\u003e today. Of course I want the RTX Spark Machine! Who doesn\u0026rsquo;t? It is awesome! I am being nostalgic about my original Microsoft Surface Pro from 2013 though. I have fond memories of developing and testing \u003ca href=\"/tag/windows-8/\"\u003eWindows 8\u003c/a\u003e \u003ca href=\"/tag/xaml/\"\u003eApps\u003c/a\u003e and \u003ca href=\"/category/xamarin/\"\u003eWindows\u003c/a\u003e \u003ca href=\"/tag/windows-phone/\"\u003ePhone\u003c/a\u003e \u003ca href=\"/tag/wp7/\"\u003eApps\u003c/a\u003e(remember those?) on it.\u003c/p\u003e\n\u003cp\u003eThe spec sheet of my \u003ca href=\"https://en.wikipedia.org/wiki/Surface_Pro_(1st_generation)\"\u003eSurface Pro 1 from 2013\u003c/a\u003e is ancient: 3rd-gen Intel Core i5, 4 GB of RAM, 128 GB SSD. Windows support ended years ago.\u003c/p\u003e","title":"Who needs Surface Ultra RTX?"},{"content":"The goal was to figure out whether a small model running on my own hardware could do the job of intent classification and structured parameter extraction well enough for one of my use-cases - read a request like \u0026ldquo;add 8 spare tent stakes to the camping box\u0026rdquo; and turn it into something the application can act on.\nI created an agentic fine-tuning and evaluation loop with a custom evaluation harness: an AI agent proposes one change at a time, a custom evaluation harness measures it against a frozen test set, and every run gets appended to a log with its settings, result and next decision. The agent does the all the work of dataset generation, training, evaluation and diagnosis.\nSetup I built a fixed test set of 45 requests covering nine intents, five cases each, and froze it. Every model, change and training run was measured against those same 45 cases. The output metrics of each run were: intent accuracy, meaning did it pick the right action, and parameter accuracy, meaning did it extract the right details. A third important number is: fallbacks, the count of cases where the model declined to answer and returned \u0026ldquo;unclear.\u0026rdquo;\nThe OpenAI baseline (gpt-5.6-luna) was created and frozen. It scored 93.33% intent and 71.11% parameter accuracy with no fallbacks.\nAll local training ran on a consumer RTX 3060, in WSL2 with CUDA. LoRA fine-tuning, rank 16, alpha 32, learning rate 1e-4, batch size 4. A 15-epoch run takes about 20 minutes.\nThe entire source, including training data, eval harness, scripts and agent skill is on GitHub - needle-tuner.\nPart 1 - needle2 The first local comparison with needle2 model from Cactus. It scored 4.44% intent accuracy. The problem turned out to be how I was asking the question. I had given the model one abstract, generic \u0026ldquo;classify this\u0026rdquo; tool. I replaced it with eight concrete tools, one for each real action the application supports.\nThe result went to 62.22% intent and 68.89% parameter accuracy.\nWith this reasonable starting point, I fine-tuned on a small purpose-built training set and ran a structured loop: change one thing, measure against the frozen test set, write down the result.\nNeedle2 configuration Intent Parameter Base model, redesigned tools, no training 62.22% 68.89% Best fine-tuned run (5 epochs, rank 8) 64.44% 62.22% Longer training (30 epochs) 57.78% 64.44% Heavier defaults 42.22% 51.11% The best training result gained two points on intent accuracy over no training at all, and lost six on parameters. More training made things worse. The heaviest run also refused to answer far more often, with 15 fallbacks against 9 for the untrained model. The results were noisy enough to make any single comparison suspect. Two runs of the identical best configuration measured 64.44% and 60.00%, so I stopped treating one good run as evidence of anything. Validation loss kept improving while held-out accuracy got worse. Had I watched the training dashboard instead of the frozen test set, I would have shipped a regression. I stopped at this point.\nPart 2 - needle3 A new version of the model family had shipped in the mean time, with a different architecture and a different native engine. Untrained, needle3 measured 71.11% intent and 66.67% parameter accuracy with 7 fallbacks. I modified the agentic loop to support the new model and executed again.\nA one-epoch smoke test scored 68.89% and 73.33%, which is one run on one epoch and proves nothing on its own. A full 30-epoch run at the wrapper defaults scored 71.11% and 66.67%, identical to the untrained base. However, the per-intent breakdown had shifted underneath, some intents up and some down, while the totals stayed flat. Validation loss bottomed out at epoch 13 and climbed for the remaining 17 epochs while training loss kept falling. Same overfitting pattern needle2 had shown.\nThe issue Instead of tuning another hyperparameter, I stopped reading aggregate scores and started reading individual failures.\nThe training data and the held-out test set agreed on which intent was correct. They disagreed on the convention for writing the parameters down.\nThe first problem was descriptive adjectives. For delete requests, the test set strips condition words from item names, so \u0026ldquo;the broken toaster\u0026rdquo; is expected to yield \u0026rsquo;toaster\u0026rsquo;. All 12 authored delete rows in my training data did the opposite, keeping \u0026lsquo;cracked mixing bowl\u0026rsquo; and \u0026rsquo;expired pain reliever\u0026rsquo; intact.\nThe second problem was a wrong key name. For inventory-viewing requests, the training data used a \u0026rsquo;location\u0026rsquo; key for the container slot while every other intent, and the test set, used \u0026lsquo;boxLabel\u0026rsquo;. It also carried a \u0026lsquo;scope\u0026rsquo; key that appears in zero held-out cases.\nThe model was learning my convention faithfully and being marked wrong for it, on 100% of those cases. That also explains why longer training hurt: more epochs meant learning the wrong answer more thoroughly.\nThe Fix I corrected 12 delete rows and 20 view-inventory rows, regenerated the derived datasets, re-pinned the integrity hashes and re-ran the validation suite. No hyperparameter change and dropped Epoch count from 30 to 15, taken from the previous run\u0026rsquo;s validation-loss minimum.\nResult: 82.22% intent and 75.56% parameter accuracy, 6 fallbacks.\nRun Intent Parameter Fallbacks Needle2 base 62.22% 68.89% 9 Needle2 best fine-tune 64.44% 62.22% not recorded Needle3 base 71.11% 66.67% 7 Needle3 fine-tuned, original data, 30 epochs 71.11% 66.67% 6 Needle3 fine-tuned, corrected data, 15 epochs 82.22% 75.56% 6 OpenAI (frozen baseline) 93.33% 71.11% 0 That is 11 points of intent accuracy over its own base model and 20 over needle2\u0026rsquo;s base. It is also the first time a local model beat the hosted API on parameter accuracy, 75.56% against 71.11%. Intent accuracy is still 11 points behind.\nThe per-intent movement matches the diagnosis. Delete went from 80%/40% to 100%/80%. Search went from 60%/60% to 100%/100%. Update improved as well, since the bare-noun convention is shared by every intent that names an item.\nValidation loss behaved differently too. With the corrected data it declined every one of the 15 epochs, with none of the mid-run turnaround the unfixed run showed. The contradictory labels had been generating the overfitting signal themselves.\nNext Parameter extraction already beats the API. Intent classification is 11 points behind, and most of the remaining gap sits in one diagnosed failure mode: deciding whether a vague request is actionable.\nThe next lever is contrastive training examples sitting right on that boundary. After that the options get expensive: changes to how the model produces its answers, training that explicitly teaches it what a wrong answer looks like, or a different architecture.\nHyperparameter tuning and the size of the training dataset should also be revisited to explore further improvements to intent classification.\nBecause the same 45 cases were used to decide which experiment to run next, they are now a model-selection set rather than an unbiased final exam. Before anyone calls this production-ready it has to be tested against a separate set of cases it has never influenced.\nThe project also produced a reproducible pipeline along the way. A frozen test set, hash-pinned datasets, a documented training process, a log of every attempt including the failures, and a default path that validates without training and without calling paid APIs. That infrastructure is the reason the annotation issue was discoverable at all.\n","permalink":"https://www.tewari.info/2026/09/24/agentic-finetuning-using-a-custom-harness/","summary":"\u003cp\u003eThe goal was to figure out whether a small model running on my own hardware could do the job of intent classification and structured parameter extraction  well enough for one of my use-cases - read a request like \u0026ldquo;add 8 spare tent stakes to the camping box\u0026rdquo; and turn it into something the application can act on.\u003c/p\u003e\n\u003cp\u003eI created an agentic fine-tuning and evaluation loop with a custom evaluation harness: an AI agent proposes one change at a time, a custom evaluation harness measures it against a frozen test set, and every run gets appended to a log with its settings, result and next decision. The agent does the all the work of dataset generation, training, evaluation and diagnosis.\u003c/p\u003e","title":"Agentic finetuning using a custom harness"},{"content":"Device Code Flow has been built into OAuth2 for years, originally designed for TVs and game consoles. It works just as well for a Docker container. It requires no credentials stored on the agent machine. It gives you narrow, revocable access that the agent cannot exceed.\nI have OpenClaw deployed in a sandboxed docker container on a dedicated host. I communicate with it via a Telegram bot, in a locked-down chat.\nI wired the device-code authentication pattern up with OpenClaw and Microsoft (Personal/Consumer) services, but the authentication approach works with any app and any command-line tool you want to run in a headless environment, including Custom APIs. Device code flow + Entra ID app registrations give you a zero-stored-credentials gateway to any HTTP API you can build, not just Microsoft Graph.\nWhat Is Device Code Flow?\nOAuth2 device code flow (RFC 8628) was designed for \u0026ldquo;input-constrained devices\u0026rdquo; — things without a keyboard or a browser. Think of how you sign in to Netflix on a smart TV: a short code appears on screen, you visit a URL on your phone, you type the code in, and the TV logs in. You never type your password on the TV.\nThe official name for that pattern is the device authorization grant. A Docker container is, from the protocol\u0026rsquo;s perspective, exactly the same kind of device. It has no browser. It cannot perform an interactive redirect. But it can make HTTP requests, and that is all it needs.\nThe flow has three steps:\n1. The app posts to the identity provider\u0026rsquo;s device code endpoint. It gets back a short user code (like \u0026ldquo;WDJB-MJHT\u0026rdquo;), a verification URL, and a polling device code.\n2. The user visits the URL on any browser, on any device — their phone, laptop, anything — and enters the short code. They sign in normally, with their usual credentials and MFA if it is enabled.\n3. The app polls the token endpoint in the background. Once the user finishes signing in, the poll returns a real access token and a refresh token. The app stores these and uses them for API calls going forward.\nThe app never sees the password. The password goes directly from the user\u0026rsquo;s browser to the identity provider. The app only ever handles two things: a short temporary code that it sends to the user, and a token that the identity provider gives back once the user has authenticated.\nOpenClaw running in a Docker container fits this model exactly.\nWhich Services Support this? Device code flow is not a Microsoft-only feature. It is a standard OAuth2 extension (RFC 8628) and most major identity providers support it — including Microsoft, Google, GitHub, and AWS. If a service uses Okta or Auth0 for identity, those support it too.\nThe Security Architecture The agent never sees your credentials. Your password is typed in your browser, on your device, to your identity provider\u0026rsquo;s servers. It never touches the container. The agent only handles a short temporary code to give you, and a token issued by the provider once you have authenticated.\nThe device code is one-time and short-lived. After the user authenticates, the code is permanently invalidated. An intercepted code is useless without the user\u0026rsquo;s credentials and MFA.\nScopes define the ceiling. You configure the OAuth app or app registration to request only specific permissions. The agent cannot exceed those scopes. If you configure read-only access to email, the token cannot be used to send or delete email.\nThis is the authentication pattern that many of the consumer devices you already own use to access your accounts on your behalf. Your TV\u0026rsquo;s YouTube app, your smart home hub\u0026rsquo;s Google integration, the GitHub CLI you use on your workstation — these all use device flow. You have been trusting it for years without knowing what it was called.\nHow the implementation works There are three components, and they run as separate Docker services that talk to each other through the Docker socket.\nThe app sidecar is your application container. It runs your CLI tool and your auth logic. It does nothing on its own. Its only job is to hold the authenticated token cache and execute commands on demand when OpenClaw calls into it.\nOpenClaw is the AI agent container. It connects to Telegram, understands natural language, and knows which skills to run for which requests. It does not know anything about OAuth or your specific app. It just runs shell commands you specified and reports results back to you.\nThe Telegram auth bridge is a small script that lives inside the sidecar. It registers a device code callback, requests an auth flow, and uses the Telegram Bot API to forward the code to you — then confirms when authentication completes.\nThe compose file looks roughly like this:\nservices: myapp-sidecar: image: ghcr.io/youruser/myapp:latest command: [\u0026#34;sleep\u0026#34;, \u0026#34;infinity\u0026#34;] environment: - XDG_DATA_HOME=/data - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID} volumes: - ${APP_DATA_DIR:-./app-data}:/data restart: unless-stopped openclaw-gateway: build: context: . dockerfile: Dockerfile.openclaw volumes: - /var/run/docker.sock:/var/run/docker.sock - ./skills:/app/skills group_add: - \u0026#34;${DOCKER_GID:-999}\u0026#34; environment: - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} ports: - \u0026#34;18789:18789\u0026#34; restart: unless-stopped The Callback Pattern The auth manager has a method called set_device_code_callback. You pass it a function, and when the device code is ready, the auth manager calls your function with the code and the verification URL rather than trying to open a browser.\nclass AuthManager: def __init__(self, client_id: str, authority: str) -\u0026gt; None: self._client_id = client_id self._authority = authority.rstrip(\u0026#34;/\u0026#34;) self._on_device_code = None self._tokens = self._load_cache() def set_device_code_callback(self, fn) -\u0026gt; None: self._on_device_code = fn async def _device_code_auth(self) -\u0026gt; None: async with httpx.AsyncClient() as client: resp = await client.post( f\u0026#34;{self._authority}/oauth2/v2.0/devicecode\u0026#34;, data={\u0026#34;client_id\u0026#34;: self._client_id, \u0026#34;scope\u0026#34;: OAUTH_SCOPES}, timeout=30, ) flow = resp.json() user_code = flow[\u0026#34;user_code\u0026#34;] verification_uri = flow[\u0026#34;verification_uri\u0026#34;] device_code = flow[\u0026#34;device_code\u0026#34;] interval = flow.get(\u0026#34;interval\u0026#34;, 5) expires_in = flow.get(\u0026#34;expires_in\u0026#34;, 300) if self._on_device_code: self._on_device_code({ \u0026#34;user_code\u0026#34;: user_code, \u0026#34;verification_uri\u0026#34;: verification_uri, \u0026#34;message\u0026#34;: flow.get(\u0026#34;message\u0026#34;, \u0026#34;\u0026#34;), }) else: try: webbrowser.open(verification_uri) except Exception: pass deadline = time.time() + expires_in while time.time() \u0026lt; deadline: await asyncio.sleep(interval) async with httpx.AsyncClient() as client: resp = await client.post( f\u0026#34;{self._authority}/oauth2/v2.0/token\u0026#34;, data={ \u0026#34;client_id\u0026#34;: self._client_id, \u0026#34;grant_type\u0026#34;: \u0026#34;urn:ietf:params:oauth:grant-type:device_code\u0026#34;, \u0026#34;device_code\u0026#34;: device_code, }, timeout=30, ) body = resp.json() if resp.status_code == 200 and \u0026#34;access_token\u0026#34; in body: self._store_tokens(body) return error = body.get(\u0026#34;error\u0026#34;, \u0026#34;\u0026#34;) if error == \u0026#34;authorization_pending\u0026#34;: continue elif error == \u0026#34;slow_down\u0026#34;: interval += 5 elif error in (\u0026#34;authorization_declined\u0026#34;, \u0026#34;expired_token\u0026#34;): raise AuthError(error) else: raise AuthError(body.get(\u0026#34;error_description\u0026#34;, \u0026#34;Auth failed\u0026#34;)) The polling loop handles the three error codes the spec defines: authorization_pending (keep waiting), slow_down (back off and increase the interval by 5 seconds), and the terminal errors that stop polling.\nThe Telegram Bridge With the callback mechanism in place, the Telegram bridge is just a script that registers a callback and uses the Telegram Bot API to deliver the code to you:\nimport asyncio, os, sys, traceback import httpx from your_app.auth import AuthManager from your_app.config import Settings TELEGRAM_BOT_TOKEN = os.environ[\u0026#34;TELEGRAM_BOT_TOKEN\u0026#34;] TELEGRAM_CHAT_ID = os.environ[\u0026#34;TELEGRAM_CHAT_ID\u0026#34;] async def send_telegram(text: str) -\u0026gt; None: url = f\u0026#34;https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage\u0026#34; async with httpx.AsyncClient() as client: await client.post(url, json={ \u0026#34;chat_id\u0026#34;: TELEGRAM_CHAT_ID, \u0026#34;text\u0026#34;: text, \u0026#34;parse_mode\u0026#34;: \u0026#34;Markdown\u0026#34;, }, timeout=30) async def main() -\u0026gt; int: settings = Settings() auth = AuthManager(settings.client_id, settings.authority) if auth.is_signed_in(): await send_telegram(\u0026#34;Already authenticated.\u0026#34;) return 0 def on_device_code(info: dict) -\u0026gt; None: msg = ( \u0026#34;*Auth Required*\\n\\n\u0026#34; f\u0026#34;Go to: {info[\u0026#39;verification_uri\u0026#39;]}\\n\u0026#34; f\u0026#34;Enter code: `{info[\u0026#39;user_code\u0026#39;]}`\\n\\n\u0026#34; \u0026#34;Complete sign-in in your browser and I\u0026#39;ll confirm when done.\u0026#34; ) try: asyncio.get_event_loop().create_task(send_telegram(msg)) except RuntimeError: import requests requests.post( f\u0026#34;https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage\u0026#34;, json={\u0026#34;chat_id\u0026#34;: TELEGRAM_CHAT_ID, \u0026#34;text\u0026#34;: msg, \u0026#34;parse_mode\u0026#34;: \u0026#34;Markdown\u0026#34;}, timeout=10, ) auth.set_device_code_callback(on_device_code) try: user_info = await auth.sign_in() await send_telegram(f\u0026#34;*Signed in* as {user_info[\u0026#39;name\u0026#39;]} ({user_info[\u0026#39;email\u0026#39;]})\u0026#34;) return 0 except Exception as exc: await send_telegram(f\u0026#34;*Auth failed:* {exc}\\n```{traceback.format_exc()[:800]}```\u0026#34;) return 2 if __name__ == \u0026#34;__main__\u0026#34;: sys.exit(asyncio.run(main())) The OpenClaw Skill On the OpenClaw side, a \u0026ldquo;skill\u0026rdquo; is a markdown file. When OpenClaw sees a trigger phrase in Telegram, it runs the associated shell command. The markdown file looks like this:\n--- name: myapp-auth description: Authenticate with the cloud service via device code flow, coordinated through Telegram. --- ## myapp-auth Use this skill when the user sends \u0026#34;/auth\u0026#34;, \u0026#34;authenticate\u0026#34;, or \u0026#34;sign in\u0026#34;. Run the following command and wait up to 360 seconds for it to complete. The script sends the device code to the user via Telegram and confirms when done. docker exec myapp-sidecar-1 python /app/scripts/telegram_auth.py Summary Device code flow is a mature, widely-supported OAuth2 pattern that maps naturally onto OpenClaw running in Docker container. With this pattern OpenClaw never handles your credentials. It gets scoped, revocable tokens from the identity provider, after you have authenticated in your own browser. A Telegram bot is all you need to coordinate the handoff of the temporary code.\nThe approach works for many use-cases across Microsoft accounts, Google, GitHub, AWS, Auth0, Okta and others. It supports exactly the kinds of personal automations that make an OpenClaw genuinely useful in daily life.\nReferences OpenClaw Documentation OpenClaw: Creating Skills RFC 8628: OAuth 2.0 Device Authorization Grant Microsoft Identity Platform: Acquire a Token Using Device Code Flow Microsoft Graph Permissions Reference Auth0: Device Authorization Flow Okta: Configure Device Authorization Grant Flow Telegram Bot API Docker Compose File Reference ","permalink":"https://www.tewari.info/2026/04/06/device-code-auth-flow-with-openclaw/","summary":"\u003cp\u003eDevice Code Flow has been built into OAuth2 for years, originally designed for TVs and game consoles. It works just as well for a Docker container. It requires no credentials stored on the agent machine. It gives you narrow, revocable access that the agent cannot exceed.\u003c/p\u003e\n\u003cp\u003eI have OpenClaw deployed in a sandboxed docker container on a dedicated host. I communicate with it via a Telegram bot, in a locked-down chat.\u003c/p\u003e","title":"Giving OpenClaw Secure Access to Cloud Services Without Sharing Your Password"},{"content":"OpenflowSight is a Streamlit application for searching, filtering, and analyzing Openflow telemetry data, inspired by Azure App Insights Search UX.\nIt\u0026rsquo;s a log explorer focused on Openflow telemetry. It helps you quickly identify relevant events, see when they spiked, and which processors were involved. Search, group similar events, and export results for deeper offline analysis.\nOpenflow is an exciting new unified data integration tool from Snowflake based on Apache NiFi. Logs, traces, and metrics emitted at runtime are written to the Event table which supports the OpenTelemetry data model. OpenflowSight surfaces this data to enable convenient, efficient monitoring and analysis of Openflow operations from a graphical dashboard—instead of using SQL queries.\nKey Features Runtime Filtering — Select multiple runtimes, toggle system runtimes, filter by processor and log level Smart Search — Multi-term search (comma-separated) with contains, regex, and exact match modes Timeline View — Interactive histogram with zoom/pan, configurable time buckets (1 min to 1 hour), preset windows (1h/6h/24h/7d) Grouped Patterns — Fuzzy clustering that normalizes dynamic values (timestamps, UUIDs) for accurate pattern grouping Individual Logs — Excel-like grid with sorting, filtering, pagination, and multi-select CSV Export — One-click export with smart file naming Tech Stack Streamlit Plotly Altair AG Grid RapidFuzz Pandas Open Source OpenflowSight is open-source and contributions are welcome—features, fixes, docs, anything. If it helps you debug Openflow pipelines faster, that\u0026rsquo;s a win.\nView on GitHub →\n","permalink":"https://www.tewari.info/2026/01/24/openflowsight-log-analysis-for-snowflake-openflow-telemetry/","summary":"\u003cp\u003e\u003cstrong\u003eOpenflowSight\u003c/strong\u003e is a Streamlit application for searching, filtering, and analyzing Openflow telemetry data, inspired by \u003ca href=\"https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview\"\u003eAzure App Insights\u003c/a\u003e Search UX.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s a log explorer focused on Openflow telemetry. It helps you quickly identify relevant events, see when they spiked, and which processors were involved. Search, group similar events, and export results for deeper offline analysis.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://docs.snowflake.com/en/user-guide/data-integration/openflow/monitor\"\u003eOpenflow\u003c/a\u003e is an exciting new unified data integration tool from Snowflake based on Apache NiFi. Logs, traces, and metrics emitted at runtime are written to the \u003ca href=\"https://docs.snowflake.com/en/developer-guide/logging-tracing/event-table-setting-up\"\u003eEvent table\u003c/a\u003e which supports the \u003ca href=\"https://docs.snowflake.com/en/developer-guide/logging-tracing/event-table-columns\"\u003eOpenTelemetry data model\u003c/a\u003e. OpenflowSight surfaces this data to enable convenient, efficient monitoring and analysis of Openflow operations from a graphical dashboard—instead of using SQL queries.\u003c/p\u003e","title":"OpenflowSight - Log Analysis for Snowflake Openflow Telemetry"},{"content":"What I learned while creating Bookshelf (open source RAG Application)\nI had the opportunity to speak at the AllThingsOpen.ai 2025 Conference recently. It was a wonderful experience to learn from and share with so many amazing fellow presenters and attendees. All Things Open AI 2025 session recordings are available now.\nI spoke about several key aspects of Retrieval-Augmented Generation (RAG) and vector databases. The main topics I addressed included The Core Concepts of RAG, Embedding Models vs. Inference Models, Handling Multiple Embeddings and various Optimizations Beyond Naive RAG such as chunking strategies, enrichment with metadata, auto-merging retriever, and reranking models. Finally, I touched on Local Execution and GPU Utilization.\nYou can watch the recording here: YouTube - How I created Bookshelf: An Open Source AI-Powered Personal Knowledge Base - Ash Tewari\nThe slides can be downloaded from here: (Google Drive Link)\nReferences and Links:\nAI Powered Bookshelf - Blog Post HuggingFace - MTEB Leaderboard PyTorch - Local Execution Medium - A Brief Introduction to Retrieval Augmented Generation(RAG) [Microsoft - RAG Architecture](http://Design and develop a RAG solution) Amazon - Retrieval Augmented Generation ","permalink":"https://www.tewari.info/2025/03/30/understanding-rag-all-things-open-ai-2025/","summary":"\u003cp\u003e\u003cstrong\u003eWhat I learned while creating Bookshelf (open source RAG Application)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eI had the opportunity to speak at the \u003ca href=\"https://allthingsopen.ai/\"\u003eAllThingsOpen.ai 2025 Conference\u003c/a\u003e recently. It was a wonderful experience to learn from and share with so many amazing fellow presenters and attendees. All Things Open AI 2025 session recordings are available now.\u003c/p\u003e\n\u003cp\u003eI spoke about several key aspects of Retrieval-Augmented Generation (RAG) and vector databases. The main topics I addressed included The Core Concepts of RAG, Embedding Models vs. Inference Models, Handling Multiple Embeddings and various Optimizations Beyond Naive RAG such as chunking strategies, enrichment with metadata, auto-merging retriever, and reranking models. Finally, I touched on Local Execution and GPU Utilization.\u003c/p\u003e","title":"Understanding RAG @ All Things Open AI 2025"},{"content":"I\u0026rsquo;m excited to announce the release of SPCHR. Pronounced as \u0026ldquo;speaker\u0026rdquo;. I know, I know. My apologies, it was too late at night and that\u0026rsquo;s the best I could come up with ;)\nIt is a Windows desktop application for speech-to-text transcription. You can use it to \u0026ldquo;add\u0026rdquo; voice input to applications that don’t natively support it. It works anywhere you can type or paste text. You can use it entirely locally on your PC if you like, so it is private and secure. Key Features Flexible: SPCHR can use either Azure Speech Services or a local OpenAI Whisper model, giving you the flexibility to choose between cloud-based and local transcription. Zero Configuration: The application works immediately with local Whisper processing - no account setup required! Global Hotkey: Start and stop recording from any application with Ctrl+Alt+L. Seamless Integration: Transcribed text is automatically pasted into your active window. Getting Started Clone the repository Build the solution using Visual Studio and run it Press Ctrl+Alt+L and start speaking Watch as your words appear in your active window For those wanting cloud-based transcription, simply add your Azure Speech Services credentials to the configuration file. Open Source SPCHR is released under the MIT License, and I welcome contributions from the community. Whether you\u0026rsquo;re interested in adding features, fixing bugs, or improving documentation, your help is appreciated.\nCheck out GitHub repository\nWhat\u0026rsquo;s next This is just the beginning for SPCHR. Several improvements can be done:\nAdditional language support Customizable hotkeys Installer UI Enhancements AI Enhanced Features Try it out Ready to transform how you interact with your computer? Visit the GitHub repository to get started with SPCHR today.\nI\u0026rsquo;m excited to see how you\u0026rsquo;ll use SPCHR in your workflow and look forward to your feedback!\n","permalink":"https://www.tewari.info/2025/02/09/spchr-speech-to-text-app-for-windows/","summary":"\u003cp\u003eI\u0026rsquo;m excited to announce the release of SPCHR. Pronounced as \u0026ldquo;speaker\u0026rdquo;. I know, I know. My apologies, it was too late at night and that\u0026rsquo;s the best I could come up with ;)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIt is a Windows desktop application for speech-to-text transcription.\u003c/li\u003e\n\u003cli\u003eYou can use it to \u0026ldquo;add\u0026rdquo; voice input to applications that don’t natively support it. It works anywhere you can type or paste text.\u003c/li\u003e\n\u003cli\u003eYou can use it entirely locally on your PC if you like, so it is private and secure.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-features\"\u003eKey Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFlexible\u003c/strong\u003e: SPCHR can use either Azure Speech Services or a local OpenAI Whisper model, giving you the flexibility to choose between cloud-based and local transcription.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eZero Configuration\u003c/strong\u003e: The application works immediately with local Whisper processing - no account setup required!\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGlobal Hotkey\u003c/strong\u003e: Start and stop recording from \u003cem\u003eany\u003c/em\u003e application with Ctrl+Alt+L.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSeamless Integration\u003c/strong\u003e: Transcribed text is automatically pasted into your active window.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"getting-started\"\u003eGetting Started\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eClone the repository\u003c/li\u003e\n\u003cli\u003eBuild the solution using Visual Studio and run it\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePress Ctrl+Alt+L and start speaking\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eWatch as your words appear in your active window\u003c/li\u003e\n\u003cli\u003eFor those wanting cloud-based transcription, simply add your Azure Speech Services credentials to the configuration file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"open-source\"\u003eOpen Source\u003c/h2\u003e\n\u003cp\u003eSPCHR is released under the MIT License, and I welcome contributions from the community. Whether you\u0026rsquo;re interested in adding features, fixing bugs, or improving documentation, your help is appreciated.\u003c/p\u003e","title":"SPCHR: Speech To Text App for Windows"},{"content":"Do you remember which one of those boxes in the garage has your old phone? Or that toy your child wants to play with again? Or the tripod you need for your weekend trip? Oh what about that massager that you could really use right now! You would probably have to dig through those boxes to find it. Same problem when moving. There are always some boxes that you don\u0026rsquo;t want to open right away, but you wish you could open just the right one when you need something.\nI have created WhichBox- your AI Assistant to find that box. It uses latest Vision AI models to help you find things quickly. Here\u0026rsquo;s what you do -\nTake pictures of the content inside each labelled box to create an inventory. Use WhichBox to easily identify the box containing the item you are looking for. You can check it out here - https://whichbox.streamlit.app/\nThe demo has four photos of labelled boxes with some content in them. Note that there can be multiple photos of the same box. You can take photos as you are filling up the box to capture things at the bottom.\nYou can ask for a specific thing, like \u0026ldquo;Find Fitbit\u0026rdquo; or just \u0026ldquo;fitbit\u0026rdquo;\nYou can go for a general category, like \u0026ldquo;Camera Equipment\u0026rdquo;\nYou can get all boxes containing \u0026ldquo;USB Adapters\u0026rdquo;\nYou can look for \u0026ldquo;Groot\u0026rdquo; or if you can\u0026rsquo;t remember the name of a specific toy then you can look for \u0026ldquo;all toys of movie characters\u0026rdquo;\nFor now, you can bring your own API Key and use your own photos to try this out.\nWhichBox : https://whichbox.streamlit.app/\n","permalink":"https://www.tewari.info/2024/08/04/whichbox-ai-assistant-app/","summary":"\u003cp\u003eDo you remember which one of those boxes in the garage has your old phone? Or that toy your child wants to play with again? Or the tripod you need for your weekend trip? Oh what about that massager that you could really use right now! You would probably have to dig through those boxes to find it. Same problem when moving. There are always some boxes that you don\u0026rsquo;t want to open right away, but you wish you could open just the right one when you need something.\u003c/p\u003e","title":"WhichBox - AI Assistant App"},{"content":"Bookshelf is a Generative AI application built as a rudimentary, but fairly capable, RAG implementation written in python. It can use an open source LLM model (running locally or in the cloud) or a GPT model via OpenAI\u0026rsquo;s API.\nThe application is created using streamlit. I used llama-index for orchestrating the loading of documents into the vector database. Only TokenTextSplitter is currently used. It does not optimize for PDF, html and other formats. ChromaDb is the vector database to store the embedding vectors and metadata of the document nodes. You can use any open source embeddings model from HuggingFace. Bookshelf will automatically use the GPU when creating local embeddings, if the GPU is available on your machine. You can use OpenAI embeddings as well. There is no way to use a specific OpenAI embedding model or configure the parameters yet. Use OpenAI API or any OpenAI compatible LLM API (using LMStudio, Ollama or text-generation-webui) of your choice. There is a live demo on streamlit cloud - https://bookshelf.streamlit.app/ The demo allows only OpenAI integration. You can run it locally for accessing Open Source embedding models and LLMs. Live demo - https://bookshelf.streamlit.app/\nYou will need your OpenAI api key for the demo.\nIf you are running it locally, you will have the option of using an Open Source LLM instance via an API Url. In the screenshot, I am using an open source Embedding Model from HuggingFace (sentence-transformers/all-mpnet-base-v2) and The local LLM server at http://localhost:1234/v1\nCollections tab shows all collections in the database. It also shows the names of all the files in the selected collection. You can inspect individual chunks for the metadata and text of each chunk. You can delete all contents of the collection ( there is no warning ).\nYou can modify the collection name to create a new collection. Multiple files can be uploaded at the same time. You can specify if you want to extract metadata from the file contents. Enabling this option can add significant cost because it employs Extractors which use LLM to generate title, summaries, keywords and questions for each document.\nOn the Retrieve tab, you can query chunks which are semantically related to your query.\nOn the Prompt tab, you can prompt your LLM. The context as well as the Prompt Template is editable.\nHere is an example of using the context retrieved from chunks in the Vector database to query the LLM.\nThis inference was performed using Phi3 model running locally on LMStudio.\nCode is on Github - https://github.com/ashtewari/bookshelf\nHave fun!\n","permalink":"https://www.tewari.info/2024/04/28/ai-powered-bookshelf/","summary":"\u003cp\u003eBookshelf is a Generative AI application built as a rudimentary, but fairly capable, \u003ca href=\"https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/\"\u003eRAG\u003c/a\u003e implementation written in \u003ca href=\"https://www.python.org/doc/\"\u003epython\u003c/a\u003e. It can use an open source LLM model (running locally or in the cloud) or a GPT model via OpenAI\u0026rsquo;s API.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe application is created using \u003ca href=\"https://streamlit.io/\"\u003estreamlit\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eI used \u003ca href=\"https://www.llamaindex.ai/\"\u003ellama-index\u003c/a\u003e for orchestrating the loading of documents into the \u003ca href=\"https://en.wikipedia.org/wiki/Vector_database\"\u003evector database\u003c/a\u003e. Only TokenTextSplitter is currently used. It does not optimize for PDF, html and other formats.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.trychroma.com/\"\u003eChromaDb\u003c/a\u003e is the vector database to store the embedding vectors and metadata of the document nodes.\u003c/li\u003e\n\u003cli\u003eYou can use any open source embeddings model from \u003ca href=\"https://huggingface.co/models?other=embeddings\"\u003eHuggingFace\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBookshelf will automatically use the GPU when creating local embeddings, if the GPU is available on your machine.\u003c/li\u003e\n\u003cli\u003eYou can use \u003ca href=\"https://platform.openai.com/docs/guides/embeddings\"\u003eOpenAI embeddings\u003c/a\u003e as well. There is no way to use a specific OpenAI embedding model or configure the parameters yet.\u003c/li\u003e\n\u003cli\u003eUse OpenAI API or any OpenAI compatible LLM API (using \u003ca href=\"https://lmstudio.ai/\"\u003eLMStudio\u003c/a\u003e, \u003ca href=\"https://ollama.com/\"\u003eOllama\u003c/a\u003e or \u003ca href=\"https://github.com/oobabooga/text-generation-webui\"\u003etext-generation-webui\u003c/a\u003e) of your choice.\u003c/li\u003e\n\u003cli\u003eThere is a live demo on streamlit cloud - \u003ca href=\"https://bookshelf.streamlit.app/\"\u003ehttps://bookshelf.streamlit.app/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe demo allows only OpenAI integration. You can run it locally for accessing Open Source embedding models and LLMs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLive demo - \u003ca href=\"https://bookshelf.streamlit.app/\"\u003ehttps://bookshelf.streamlit.app/\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e","title":"AI Powered Bookshelf"},{"content":"Creating the ideal prompt can be the key to transforming a less than average outcome into one that is remarkably relevant. Discovering the right prompt often involves numerous revisions and a method of trial and error. I felt the need to refer to my past attempts, modifications made to prompts, LLM models I tried and other LLM settings as well relative cost of these combinations. There are a few options to help with this : promptflow, langsmith, LLMStudio and others.\nI tried LLMStudio and promptflow. This article is about LLMStudio.\nIf you are installing LLMStudio on Windows, use WSL. Here are the steps :\nCreate a folder on your machine. Create .env file here with following content: OPENAI_API_KEY=\u0026#34;sk-api_key\u0026#34; ANTHROPIC_API_KEY=\u0026#34;sk-api_key\u0026#34; Enter wsl and create a new python environment with conda (base) PS c:\\code\\llmstudio\u0026gt; wsl (base) ash@DESKTOP:/mnt/d/code/llmstudio$ conda activate lmstd LLMStudio runs on Bun. Bun is a javascript runtime like Node.\nInstructions for installing bun on windows :\nhttps://bun.sh/docs/installation#windows sudo apt-get install unzip powershell -c \u0026#34;irm bun.sh/install.ps1|iex\u0026#34; Install Node v18, if you run into ReferenceError: Request is not defined at Object. (/home/ash/miniconda3/lib/python3.11/site-packages/llmstudio/ui/node_modules/next/dist/server/web/spec-extension/request.js:28:27) Start LLMStudio Export the execution data as csv file by clicking on [Export data] button. This data includes the input, output, LLM model, Input and Output tokens as well as cost.\nReferences\nWhat is LLMstudio?\nLLMstudio by TensorOps\nLLM Studio Quickstart\nInstall Bun for Windows\nSetup Bun JS in windows using WSL and VS code\nNextJS - ReferenceError: Request is not defined\n","permalink":"https://www.tewari.info/2024/02/04/iterative-prompt-engineering-with-llmstudio/","summary":"\u003cp\u003eCreating the ideal prompt can be the key to transforming a less than average outcome into one that is remarkably relevant. Discovering the right prompt often involves numerous revisions and a method of trial and error. I felt the need to refer to my past attempts, modifications made to prompts, LLM models I tried and other LLM settings as well relative cost of these combinations. There are a few options to help with this : \u003ca href=\"https://github.com/microsoft/promptflow\"\u003epromptflow\u003c/a\u003e, \u003ca href=\"https://www.langchain.com/langsmith\"\u003elangsmith\u003c/a\u003e, \u003ca href=\"https://github.com/TensorOpsAI/LLMStudio\"\u003eLLMStudio\u003c/a\u003e and others.\u003c/p\u003e","title":"Iterative Prompt Engineering with LLMStudio"},{"content":"I have been delving into Advanced Prompt Engineering and Security techniques for Large Language Models (LLMs). As an exercise, I have created a custom GPT in ChatGPT to help practice spelling of English words. Spell It GPT is secured with Advanced Prompt Engineering techniques to guard against common attack vectors, including Direct Prompt Injection, Prompt Leaking, Role Playing, Simulation, DAN and Code Injection.\nSpell-It-GPT\nPlay with the Spell It GPT and try to break it. It is not impossible but (probably) fairly difficult to do ;) Regardless, practice spelling and have fun!\nSwitch to Voice Mode in ChatGPT Mobile App to practice spelling and put headsets on for best results!\nSpell It: https://bit.ly/3Ua0oib\nHere are some resources you can learn more about Prompt Engineering and Security:\nAdvanced Prompt Engineering Techniques\nOWASP Top 10 for Large Language Model Applications\nEducational Resources\nAdversarial Prompting in LLMs\n","permalink":"https://www.tewari.info/2024/01/21/prompt-engineering-and-security-custom-gpt/","summary":"\u003cp\u003eI have been delving into Advanced Prompt Engineering and Security techniques for Large Language Models (LLMs). As an exercise, I have created a custom GPT in \u003ca href=\"https://openai.com/blog/introducing-gpts\"\u003eChatGPT\u003c/a\u003e to help practice spelling of English words. \u003ca href=\"https://bit.ly/3Ua0oib\"\u003eSpell It\u003c/a\u003e GPT is secured with Advanced Prompt Engineering techniques to guard against common attack vectors, including Direct Prompt Injection, Prompt Leaking, Role Playing, Simulation, DAN and Code Injection.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/spell-it-gpt-256.png\"\n         alt=\"Spell-It-GPT\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eSpell-It-GPT\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003ePlay with the \u003ca href=\"https://bit.ly/3Ua0oib\"\u003eSpell It\u003c/a\u003e GPT and try to break it. It is not impossible but (probably) fairly difficult to do ;) Regardless, practice spelling and have fun!\u003c/p\u003e","title":"Prompt Engineering and Security - Custom GPT"},{"content":"You can get a free commemorative NFT if you met me at All Things Open Conference in Raleigh, NC.\nDM me at @ashtewari for the code to redeem your POAP NFT Visit https://app.poap.xyz/claim/ and enter your code Enter your Ethereum address (or ENS/Email) Mint POAP NFT\nCheck [Free minting on Gnosis] for free minting of NFT on xDAI chain If you uncheck this box you can migrate to Ethereum mainnet now but you will have to pay for that transaction. You can also migrate to mainnet later if you wish. Click on Mint POAP button Your NFT will be confirmed after the minting is complete.\nPOAP NFT Confirmation\nPOAPs are Non Fungible Tokens (NFT) issued on the blockchain. Learn more of POAPs here : https://poap.xyz/\n","permalink":"https://www.tewari.info/2022/10/31/get-an-nft-at-all-things-open-2022/","summary":"\u003cp\u003eYou can get a free commemorative NFT if you met me at \u003ca href=\"https://2022.allthingsopen.org/\"\u003eAll Things Open\u003c/a\u003e Conference in Raleigh, NC.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDM me at \u003ca href=\"https://twitter.com/ashtewari\"\u003e@ashtewari\u003c/a\u003e for the code to redeem your \u003ca href=\"https://poap.xyz/\"\u003ePOAP NFT\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVisit \u003ca href=\"https://app.poap.xyz/claim/\"\u003ehttps://app.poap.xyz/claim/\u003c/a\u003e and enter your code\u003c/li\u003e\n\u003c/ul\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/image-26.png\"/\u003e \n\u003c/figure\u003e\n\n\u003cul\u003e\n\u003cli\u003eEnter your Ethereum address (or ENS/Email)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/image-24.png\"\n         alt=\"Mint POAP NFT\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eMint POAP NFT\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cul\u003e\n\u003cli\u003eCheck [Free minting on Gnosis] for free minting of NFT on xDAI chain\n\u003cul\u003e\n\u003cli\u003eIf you uncheck this box you can migrate to \u003ca href=\"https://ethereum.org/en/nft/\"\u003eEthereum\u003c/a\u003e mainnet now but you will have to pay for that transaction. You can also migrate to mainnet later if you wish.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eClick on Mint POAP button\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eYour NFT will be confirmed after the minting is complete.\u003c/p\u003e","title":"Get an NFT at All Things Open 2022"},{"content":"","permalink":"https://www.tewari.info/contact-2/","summary":"","title":"Contact"},{"content":"","permalink":"https://www.tewari.info/contact/","summary":"","title":"Contact"},{"content":"Mythril is an open-source security analysis tool for EVM bytecode, courtesy of ConsenSys. It is also a component of their Security Analysis Service - Mythx. Mythril detects security vulnerabilities in smart contracts built for Ethereum and other EVM-compatible blockchains.\nVulnerabilities found by Mythril are reported with reference to the weaknesses listed on the Smart Contract Weakness Classification Registry (SWC Registry). I will use two entries from SWC Registry for the examples in this article:\nSWC-106 - Due to missing or insufficient access controls, malicious parties can self-destruct the contract. SWC-107 - One of the major dangers of calling external contracts is that they can take over the control flow. In the reentrancy attack (a.k.a. recursive call attack), a malicious contract calls back into the calling contract before the first invocation of the function is finished. Install Mythril on Windows \u0026gt; docker import mythril/myth\nhttps://mythril-classic.readthedocs.io/en/master/installation.html\nGet test files from github Source code for these tests is on github : mythril-tests. Clone the repo locally and adjust the paths in the commands below to match your local environment.\nAnalyze a local smart contract Analysis of SelfDestructMultiTxFeasible.sol \u0026gt; docker run -v E:\\share\\:/data mythril/myth -v4 analyze /data/mythx-tests\\05222022-25/SelfDestructMultiTxFeasible.sol\nMythril reports an instance of SWC-106 vulnerability:\nAnalysis of SimpleDAO.sol\n\u0026gt; docker run -v E:\\share\\:/data mythril/myth -v4 analyze /data/mythx-tests\\05222022-25/SimpleDAO.sol\nMythril reports three instances of SWC-107 and one instance of SWC-105:\nAnalysis of a flatenned contract file File containing the two test contracts returns five instances of vulnerabilities of both contracts:\n\u0026gt; docker run -v E:\\share\\:/data mythril/myth -v4 analyze /data/mythx-tests\\05222022-25/flatenned-01.sol\nAnalyze a contract with imported contract Most smart contracts import other contracts to reuse functionality. You do not have to flatten the contracts into one file. Mythril can work with contracts with imports specified in them : SimpleDAOWithImport.sol\n\u0026gt; docker run -v E:\\share\\:/data mythril/myth -v4 analyze /data/mythx-tests\\05222022-26/SimpleDAOWithImport.sol\nAnalyze a contract with @OpenZeppelin style import Mythril relies on solc for compiling contract source code. For @OpenZeppelin style imports, you have to specify \u0026ndash;solc-json file containing remapping for solc to locate the referenced files : SimpleDAOWith-OzImport.sol\n\u0026gt; docker run -v E:\\share\\:/data mythril/myth -v4 analyze /data/mythx-tests\\05222022-26/SimpleDAOWith-OzImport.sol \u0026ndash;solc-json=/data/solc-args.json\nAnalyzing On-Chain Contracts Mythril can analyze contracts deployed on the blockchain directly. You do not need source code of the contract. Support for infura is built-in, you can also use custom RPC endpoint. Replace INFURA_ID with your Infura project id and CONTACT_ADDRESS with the address of your contract on the blockchain :\n\u0026gt; docker run mythril/myth -v4 analyze \u0026ndash;rpc infura-rinkeby \u0026ndash;infura-id INFURA_ID -a CONTACT_ADDRESS\n","permalink":"https://www.tewari.info/2022/05/22/security-analysis-of-etheruem-smart-contracts-with-mythril/","summary":"\u003cp\u003e\u003ca href=\"https://github.com/ConsenSys/mythril\"\u003eMythril\u003c/a\u003e is an open-source security analysis tool for EVM bytecode, courtesy of \u003ca href=\"https://consensys.net/diligence/tools/\"\u003eConsenSys\u003c/a\u003e. It is also a component of their Security Analysis Service - \u003ca href=\"https://mythx.io/\"\u003eMythx\u003c/a\u003e. Mythril detects security vulnerabilities in smart contracts built for Ethereum and other EVM-compatible blockchains.\u003c/p\u003e\n\u003cp\u003eVulnerabilities found by Mythril are reported with reference to the weaknesses listed on the Smart Contract Weakness Classification Registry (\u003ca href=\"https://swcregistry.io/\"\u003eSWC Registry\u003c/a\u003e). I will use two entries from SWC Registry for the examples in this article:\u003c/p\u003e","title":"Security Analysis of Etheruem Smart Contracts with Mythril"},{"content":"KhelCoin (KHEL) is an ERC-20 token available on Ethereum blockchain. It is a Smart Contract created with Solidity, OpenZeppelin, Truffle, Ganache, Remix, web3.js and VSCode. It is currently available on Rinkeby test network. It will be launched on the Mainnet in the near future.\nYou can get KHEL coins from this website - KHEL Coin ICO\nHead over to the ICO website. You will be prompted to install Metamask and connect to your account on Rinkeby testnet. Click on \u0026ldquo;Buy KHEL Coins\u0026rdquo; button to get your own coins!\nSource code is on github - https://github.com/ashtewari/khelcoin\nPuzzle Icon Credit: https://www.flaticon.com/free-icons/puzzle\n","permalink":"https://www.tewari.info/2022/05/09/khel-coin-on-ethereum/","summary":"\u003cp\u003eKhelCoin (KHEL) is an \u003ca href=\"https://ethereum.org/en/developers/docs/standards/tokens/erc-20/\"\u003eERC-20 token\u003c/a\u003e available on \u003ca href=\"https://ethereum.org/en/\"\u003eEthereum\u003c/a\u003e blockchain. It is a \u003ca href=\"https://ethereum.org/en/smart-contracts/\"\u003eSmart Contract\u003c/a\u003e created with \u003ca href=\"https://docs.soliditylang.org/en/latest/\"\u003eSolidity\u003c/a\u003e, \u003ca href=\"https://www.openzeppelin.com/contracts\"\u003eOpenZeppelin\u003c/a\u003e, \u003ca href=\"https://trufflesuite.com/\"\u003eTruffle\u003c/a\u003e, \u003ca href=\"https://trufflesuite.com/ganache/\"\u003eGanache\u003c/a\u003e, \u003ca href=\"https://remix.ethereum.org/\"\u003eRemix\u003c/a\u003e, \u003ca href=\"https://web3js.readthedocs.io/\"\u003eweb3.js\u003c/a\u003e and \u003ca href=\"https://code.visualstudio.com/\"\u003eVSCode\u003c/a\u003e. It is currently available on \u003ca href=\"https://rinkeby.etherscan.io/token/0x15AFeB0A2caD2caC3A8140c342789C310Ad82A83\"\u003eRinkeby\u003c/a\u003e test network. It will be launched on the Mainnet in the near future.\u003c/p\u003e\n\u003cp\u003eYou can get KHEL coins from this website - \u003ca href=\"https://ashtewari.github.io/khelcoin\"\u003eKHEL Coin ICO\u003c/a\u003e\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/khelcoin-ico-metamask.png\"\n         alt=\"KhelCoin ICO page prompting to install Metamask\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eHead over to the ICO website. You will be prompted to install \u003ca href=\"https://metamask.io/\"\u003eMetamask\u003c/a\u003e and connect to your account on Rinkeby testnet. Click on \u0026ldquo;Buy KHEL Coins\u0026rdquo; button to get your own coins!\u003c/p\u003e","title":"KHEL Coin on Ethereum"},{"content":"Kusto query language can be used to get insights into Azure Kubernetes Service (AKS) clusters. Container insights collects data from AKS clusters and forwards it to Log Analytics workspace, if enabled for a cluster. This data is available for querying in the Azure Monitor. Here is an example of how you can query the pods not in running state in specific namespaces.\nKubePodInventory | where Namespace in (\u0026#34;dv\u0026#34;,\u0026#34;test\u0026#34;,\u0026#34;prod\u0026#34;) | where ContainerStatus != \u0026#34;Running\u0026#34; | where ContainerStatusReason !in (\u0026#34;\u0026#34;, \u0026#34;Completed\u0026#34;) | distinct Namespace, Name The following query includes the name of the AKS cluster and renders the output as a stacked bar chart.\nKubePodInventory | where Namespace in (\u0026#34;dv\u0026#34;,\u0026#34;test\u0026#34;,\u0026#34;prod\u0026#34;) | where ContainerStatus != \u0026#34;Running\u0026#34; | where ContainerStatusReason !in (\u0026#34;\u0026#34;, \u0026#34;Completed\u0026#34;) | distinct ClusterName, Namespace, Name | summarize dcount(Name) by ClusterName, Namespace | render columnchart kind=stacked100 You can include multiple AKS clusters in the scope in which this query is executed by clicking on [Select scope] hyperlink.\nCreate an Azure Dashboard panel with this output by clicking on [Pin to dashboard] button.\nYou can also execute this Kusto query directly using powershell.\n$workspaceName = \u0026#34;DefaultWorkspace-6637b095-xxxx-xxxx-xxxx-xxxxxxxxxxx-EUS\u0026#34; $workspaceRG = \u0026#34;defaultresourcegroup-eus\u0026#34; $WorkspaceID = (Get-AzOperationalInsightsWorkspace -Name $workspaceName -ResourceGroupName $workspaceRG).CustomerID $query = \u0026#39;KubePodInventory | where Namespace in (\u0026#34;dv\u0026#34;,\u0026#34;test\u0026#34;,\u0026#34;prod\u0026#34;) | where ContainerStatus != \u0026#34;Running\u0026#34; | where ContainerStatusReason !in (\u0026#34;\u0026#34;, \u0026#34;Completed\u0026#34;) | distinct ClusterName, Namespace, Name | summarize dcount(Name) by ClusterName, Namespace\u0026#39; $result = Invoke-AzOperationalInsightsQuery -WorkspaceId $WorkspaceID -Query $query -Timespan (New-TimeSpan -days 1) $result.results This allows you to include the results of your custom Kusto queries in any reports you might run using Azure Automation Runbooks.\n","permalink":"https://www.tewari.info/2021/04/25/kusto-queries-on-aks-clusters/","summary":"\u003cp\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/\"\u003eKusto\u003c/a\u003e query language can be used to get \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/containers/container-insights-log-search\"\u003einsights\u003c/a\u003e into Azure Kubernetes Service (\u003ca href=\"https://azure.microsoft.com/en-us/services/kubernetes-service/\"\u003eAKS\u003c/a\u003e) clusters. \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/containers/container-insights-overview\"\u003eContainer insights\u003c/a\u003e collects data from AKS clusters and forwards it to \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-tutorial\"\u003eLog Analytics\u003c/a\u003e workspace, if enabled for a cluster. This data is available for querying in the \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/logs/data-platform-logs\"\u003eAzure Monitor\u003c/a\u003e. Here is an example of how you can query the pods not in running state in specific namespaces.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eKubePodInventory\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e| where Namespace in (\u0026#34;dv\u0026#34;,\u0026#34;test\u0026#34;,\u0026#34;prod\u0026#34;)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e| where ContainerStatus != \u0026#34;Running\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e| where ContainerStatusReason !in (\u0026#34;\u0026#34;, \u0026#34;Completed\u0026#34;)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e| distinct Namespace, Name\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/image-7.png\"\n         alt=\"Log Analytics query results listing pods not in running state by namespace\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eThe following query includes the name of the AKS cluster and renders the output as a stacked bar chart.\u003c/p\u003e","title":"Kusto Queries on AKS Clusters"},{"content":"You can connect to Azure Kubernetes Service (AKS) nodes using ssh. It is documented here: Connect with SSH to Azure Kubernetes Service (AKS) cluster nodes for maintenance or troubleshooting.\nI needed to access nodes on the System node pool for collecting some logs recently, but the process documented above was not working for me. It turns out that there were two different issues, both related to adding your SSH keys to the nodes in a virtual machine scale set (VMSS).\nThis is the az cli command that adds the ssh keys to the VMSS:\naz vmss extension set \\ --resource-group $CLUSTER_RESOURCE_GROUP \\ --vmss-name $SCALE_SET_NAME \\ --name VMAccessForLinux \\ --publisher Microsoft.OSTCExtensions \\ --version 1.4 \\ --protected-settings \u0026#34;{\\\u0026#34;username\\\u0026#34;:\\\u0026#34;azureuser\\\u0026#34;, \\\u0026#34;ssh_key\\\u0026#34;:\\\u0026#34;$(cat ~/.ssh/id_rsa.pub)\\\u0026#34;}\u0026#34; I was running this command from powershell on a windows host. So, the first modification I needed was to escape the double quotes by doubling them. You can also use back ticks instead of doubling the double quotes.\naz vmss extension set \\ --resource-group $CLUSTER_RESOURCE_GROUP \\ --vmss-name $SCALE_SET_NAME \\ --name VMAccessForLinux \\ --publisher Microsoft.OSTCExtensions \\ --version 1.4 \\ --protected-settings \u0026#34;{\\\u0026#34;\u0026#34;username\\\u0026#34;\u0026#34;:\\\u0026#34;\u0026#34;azureuser\\\u0026#34;\u0026#34;, \\\u0026#34;\u0026#34;ssh_key\\\u0026#34;\u0026#34;:\\\u0026#34;\u0026#34;$(cat ~/.ssh/id_rsa.pub)\\\u0026#34;\u0026#34;}\u0026#34; The second issue was due to the fact that ssh-keygen adds a comment to the id_rsa.pub file. By default, it adds username@hostname as the comment at the end of the file . Normally, this comment wouldn\u0026rsquo;t cause any problems, but in this case it was causing an error - \u0026ldquo;Invalid escape sequence \\uXXXX\u0026rdquo;.\nThe problem was that my domain user name starts with character \u0026lsquo;u\u0026rsquo; and \u0026ldquo;domain\\userid1\u0026rdquo; was being interpreted as containing a unicode character \u0026ldquo;\\useri\u0026rdquo; which is obviously not a valid unicode character. The workaround here is to either delete the comment from the id_rsa.pub file (it works just fine without it) or to override the default comment when generating the ssh key by specifying your own comment via -C command line option.\nssh-keygen -C mycomment Finally, there is another way to execute az vmss extension set command to get around both of these issues by creating a json file and passing that as the value of \u0026ndash;protected-settings argument. Here is how -\nCreate a json file, protected_settings.json, with the following content: { \u0026#34;username\u0026#34; : \u0026#34;azureuser\u0026#34;, \u0026#34;ssh_key\u0026#34; : \u0026#34;REPLACE_THIS_WITH_CONTENT_OF_ID_RSA_PUB_FILE\u0026#34; } Pass this file as the command line argument: az vmss extension set \\ --resource-group $CLUSTER_RESOURCE_GROUP \\ --vmss-name $SCALE_SET_NAME \\ --name VMAccessForLinux \\ --publisher Microsoft.OSTCExtensions \\ --version 1.4 \\ --protected-settings protected_settings.json Works like a charm!\n","permalink":"https://www.tewari.info/2021/03/27/aks-adding-ssh-keys-to-vmss-nodes/","summary":"\u003cp\u003eYou can connect to Azure Kubernetes Service (AKS) nodes using ssh. It is documented here: \u003ca href=\"https://docs.microsoft.com/en-us/azure/aks/ssh\"\u003eConnect with SSH to Azure Kubernetes Service (AKS) cluster nodes for maintenance or troubleshooting\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI needed to access nodes on the System node pool for collecting some logs recently, but the process documented above was not working for me. It turns out that there were two different issues, both related to adding your SSH keys to the nodes in a virtual machine scale set (VMSS).\u003c/p\u003e","title":"AKS - Adding SSH Keys to VMSS Nodes"},{"content":"Azure Kubernetes Service (AKS) supports specific versions of Kubernetes.\nIt is necessary to regularly monitor the release of new versions and upgrade your AKS clusters to supported versions in order to remain in compliance with AKS Kubernetes Version Support Policy.\nAKS announces the planned date of a new minor version release and corresponding old version deprecation via AKS Release notes at least 30 days prior to removal. An email notification is sent to the subscription administrators with the planned version removal dates. You get 30 days from version removal to upgrade to a supported minor version release. Patch versions can be released anytime and you get 30 days from the removal date to upgrade to a supported patch version.\nYou should test new target Kubernetes versions and upgrade your AKS clusters in a timely manner. For that, it is necessary to proactively monitor the AKS release notes. This can easily become a chore in a large Enterprise environment. Here is a Powershell script to make it easier to stay on top of Kubernetes version releases in AKS and publish/share it with others: Get-AksSupportedVersions.\n$aksVersionsJson = az aks get-versions --location eastus $aksVersions = $aksVersionsJson | ConvertFrom-Json $aksVersions.orchestrators.upgrades.orchestratorVersion $data = $aksVersions.orchestrators | Select-Object ` -Property @{Name=\u0026#34;Version\u0026#34;;Expression={$_.orchestratorVersion}} ` , @{Name=\u0026#34;Default\u0026#34;;Expression={$_.default}} ` , @{Name=\u0026#34;Preview\u0026#34;;Expression={$_.isPreview}} ` , @{Name=\u0026#34;Upgrades\u0026#34;;Expression={$_.upgrades.orchestratorVersion -join \u0026#34;, \u0026#34;}} $versionTable = $data | ConvertTo-Html -Fragment $versionTableString = $versionTable | Out-String $html = New-Object -ComObject \u0026#34;HTMLFile\u0026#34; $html.IHTMLDocument2_write($versionTableString) $tables = $html.body.getElementsByTagName(\u0026#34;table\u0026#34;) $rptString = \u0026#34;\u0026#34; ForEach($table in $tables){ ForEach($row in $table.rows){ $cellCount = 0 ForEach($cell in $row.cells){ $cellCount++ if(($cellCount -eq 2) -and ($cell.innertext -eq \u0026#39;True\u0026#39;)) { $row.className = \u0026#34;OkStatus\u0026#34; } if(($cellCount -eq 3) -and ($cell.innertext -eq \u0026#39;True\u0026#39;)) { $row.className = \u0026#34;WarningStatus\u0026#34; } } } $rptString += $table.outerHTML } $reportDate = $(get-date -DisplayHint DateTime) | Out-String $fileTS = $(get-date -Format \u0026#34;yyyyMMdd\u0026#34;) $fileName = \u0026#34;aks-versions-$fileTS.html\u0026#34; $rptTitle = \u0026#34;\u0026lt;h1\u0026gt;AKS Kubernetes Versions\u0026lt;/h1\u0026gt;\u0026lt;p\u0026gt;$reportDate\u0026lt;/p\u0026gt;\u0026#34; $report = ConvertTo-Html -Title \u0026#34;AKS Versions\u0026#34; -Body \u0026#34;$rptTitle $rptString\u0026#34; -Head $header $report | Out-File \u0026#34;$fileName\u0026#34; It creates an HTML report of currently supported Kubernetes versions in AKS along with their respective upgrade paths. Here is an example of the report generated by the script referenced above :\nAKS Kubernetes Versions Sunday, November 8, 2020 8:47:42 PM\nVersion Default Preview Upgrades 1.16.13 1.16.15, 1.17.9, 1.17.11 1.16.15 1.17.9, 1.17.11 1.17.9 1.17.11, 1.18.6, 1.18.8 1.17.11 True 1.18.6, 1.18.8 1.18.6 1.18.8, 1.19.0 1.18.8 1.19.0 1.19.0 True Reference: How To Create An HTML Report With PowerShell\n","permalink":"https://www.tewari.info/2020/11/08/aks-supported-kubernetes-versions/","summary":"\u003cp\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/aks/\"\u003eAzure Kubernetes Service\u003c/a\u003e (AKS) \u003ca href=\"https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions\"\u003esupports specific versions\u003c/a\u003e of \u003ca href=\"https://kubernetes.io/\"\u003eKubernetes\u003c/a\u003e.\u003cbr\u003e\nIt is necessary to regularly monitor the release of new versions and upgrade your AKS clusters to supported versions in order to remain in compliance with \u003ca href=\"https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions#kubernetes-version-support-policy\"\u003eAKS Kubernetes Version Support Policy\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions#release-and-deprecation-process\"\u003eAKS announces\u003c/a\u003e the planned date of a new minor version release and corresponding old version deprecation via AKS \u003ca href=\"https://github.com/Azure/AKS/releases\"\u003eRelease notes\u003c/a\u003e at least 30 days prior to removal. An email notification is sent to the subscription administrators with the planned version removal dates. You get 30 days from version removal to upgrade to a supported minor version release. Patch versions can be released anytime and you get 30 days from the removal date to upgrade to a supported patch version.\u003c/p\u003e","title":"AKS Supported Kubernetes Versions"},{"content":"Universal Windows Platform (UWP) provides a common app platform on every device that runs Windows 10. The core APIs in UWP are the same on all Windows devices – including Desktop PC, Mobile Phone, XBox, Hololens, IOT devices and others.\nYou can target specific device capabilities of a device family with extension SDKs, but you don\u0026rsquo;t have to do that if you are only using core APIs. Those core APIs include a very impressive set of UI capabilities. What that means is that you can create a UWP application using C# and XAML which will run on an ARM based processor on Raspberry Pi – because Windows 10 IOT Core runs on that.\nUniversal Windows Platform (UWP) has come a long way. I decided to dust off my good old Raspberry Pi 2B and take it for a spin last weekend.\nThe goal was simply to create a Hello World UWP application, deploy it on Windows 10 IOT running on Raspberry Pi (RPi), without using any device specific extension SDKs. Here is the stack -\nUniversal Windows Platform App (C#/XAML) Raspberry Pi Model 2B Windows 10 IOT Core Syncfusion Essential Studio 18.1.0.42 Visual Studio 2019 Create a simple UWP application in Visual Studio 2019.\nInstall Windows 10 IOT Core on Raspberry Pi 2B and connect the device to a 50\u0026quot; screen TV.\nSelect ARM in the target platform drop down and Click on Remote Machine to Run/Debug Application on RPi device.\nSelect RPi device for deployment.\nDeployment of UWP on RPi is complete.\nUWP application running on RPi.\nI updated the UWP application to include Syncfusion Chart control. Did you know that you can get a Community License for the entire product line (including Blazor, Xamarin and UWP controls) from Syncfusion?\nUWP application is now running on RPi, attached to the Visual Studio debugger running on the development machine (Windows Surface).\nNo device specific extension SDKs were referenced, just the core UWP APIs were used.\nCode is on github.\n","permalink":"https://www.tewari.info/2020/05/22/universal-windows-platform-application-on-raspberry-pi/","summary":"\u003cp\u003eUniversal Windows Platform (UWP) provides a common app platform on every device that runs Windows 10. The core APIs in UWP are the same on all Windows devices – including Desktop PC, Mobile Phone, XBox, Hololens, IOT devices and \u003ca href=\"https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide\"\u003eothers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eYou can target specific device capabilities of a device family with \u003ca href=\"https://docs.microsoft.com/en-us/uwp/extension-sdks/device-families-overview#extension-sdks\"\u003eextension SDKs\u003c/a\u003e, but you don\u0026rsquo;t have to do that if you are only using core APIs. Those core APIs include a very \u003ca href=\"https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/\"\u003eimpressive\u003c/a\u003e set of UI capabilities. What that means is that you can create a UWP application using C# and XAML which will run on an ARM based processor on Raspberry Pi – because \u003ca href=\"https://docs.microsoft.com/en-us/windows/iot-core/develop-your-app/buildingappsforiotcore\"\u003eWindows 10 IOT Core\u003c/a\u003e runs on that.\u003c/p\u003e","title":"Universal Windows Platform Application on Raspberry Pi"},{"content":"Washington DC - May 2019\nIn this session, we will introduce you to the world of Blockchain technology. We will start with the fundamentals and explain the characteristics and use cases of Blockchains and Decentralized applications. We will explain public Blockchains as well as permissioned Blockchains - with examples from Ethereum and Hyperledger. You will learn how to create a private blockchain to get started. You will learn about Ethereum and how to program Smart Contracts for Ethereum Blockchain. We will also share best practices for secure and effective Smart Contracts development.\nImage Credit: Davidstankiewicz, Blockchain Illustration 2, CC BY-SA 4.0\n","permalink":"https://www.tewari.info/2019/05/22/getting-started-with-blockchain/","summary":"\u003cp\u003eWashington DC - May 2019\u003c/p\u003e\n\u003cp\u003eIn this session, we will introduce you to the world of Blockchain technology. We will start with the fundamentals and explain the characteristics and use cases of Blockchains and Decentralized applications. We will explain public Blockchains as well as permissioned Blockchains - with examples from Ethereum and Hyperledger. You will learn how to create a private blockchain to get started. You will learn about Ethereum and how to program Smart Contracts for Ethereum Blockchain. We will also share best practices for secure and effective Smart Contracts development.\u003c/p\u003e","title":"Getting started with Blockchain"},{"content":"TRINUG - Main Meeting : Programming Smart Contracts on Ethereum Blockchain - August 2018\nIn this session, Ash will introduce you to the world of Blockchain programming. You will learn about Ethereum and how to program Smart Contracts for Ethereum Blockchain. You will learn how to deploy and test your Contracts on a public Ethereum Testnet. Ash will share best practices for Smart Contract development. You will be able to participate in a hands-on walk-through in the latter half of the session.\n","permalink":"https://www.tewari.info/2018/08/08/programming-smart-contracts-on-ethereum-blockchain-2/","summary":"\u003cp\u003eTRINUG - Main Meeting : Programming Smart Contracts on Ethereum Blockchain - August 2018\u003c/p\u003e\n\u003cp\u003eIn this session, Ash will introduce you to the world of Blockchain programming. You will learn about Ethereum and how to program Smart Contracts for Ethereum Blockchain. You will learn how to deploy and test your Contracts on a public Ethereum Testnet. Ash will share best practices for Smart Contract development. You will be able to participate in a hands-on walk-through in the latter half of the session.\u003c/p\u003e","title":"TRINUG - Programming Smart Contracts on Ethereum Blockchain"},{"content":"Charlotte IOT - July 2018\nYou will not want to miss this chance to learn about Blockchain, a technology enabling an entire IoT ecosystem! It has a distributed database for all the transactions, which eliminates the need for the third party to authenticate the transactions. The database ledger is a continuously growing list of records, called blocks, which are linked and secured using cryptography. Charlotte IoT wants to thank Ash Tewari for traveling from Raleigh to share his extensive knowledge and experience around Blockchain. In this session, Ash will introduce you to the world of Blockchain programming. You will learn about Ethereum and how to program Smart Contracts on Ethereum Blockchain. You will learn how to deploy and test your code on a public Ethereum Testnet. Ash will complete the session with sharing some best practices for Smart Contract development. You will be able to participate in a hands-on walkthrough in the latter half of the session.\n","permalink":"https://www.tewari.info/2018/07/10/programming-smart-contracts-on-ethereum-blockchain/","summary":"\u003cp\u003eCharlotte IOT - July 2018\u003c/p\u003e\n\u003cp\u003eYou will not want to miss this chance to learn about \u003cem\u003eBlockchain\u003c/em\u003e, a technology enabling an entire IoT ecosystem! It has a distributed database for all the transactions, which eliminates the need for the third party to authenticate the transactions. The database ledger is a continuously growing list of records, called blocks, which are linked and secured using cryptography.\nCharlotte IoT wants to thank Ash Tewari for traveling from Raleigh to share his extensive knowledge and experience around \u003cem\u003eBlockchain\u003c/em\u003e. In this session, Ash will introduce you to the world of \u003cem\u003eBlockchain\u003c/em\u003e programming. You will learn about Ethereum and how to program Smart Contracts on Ethereum \u003cem\u003eBlockchain\u003c/em\u003e. You will learn how to deploy and test your code on a public Ethereum Testnet. Ash will complete the session with sharing some best practices for Smart Contract development. You will be able to participate in a hands-on walkthrough in the latter half of the session.\u003c/p\u003e","title":"Charlotte IOT - Programming Smart Contracts on Ethereum Blockchain"},{"content":"Permissioned blockchains are being developed and used in Enterprise scenarios in which higher transaction throughput, lower latency, versatile confidentiality and governance models are more important than supporting low trust levels among participants. These Enterprise requirements are not being met adequately by the public and permission-less blockchain ledgers. Enterprise scenarios typically have known actors and the trust level between these actors is very high. This allows for trade-offs between trust levels and transaction throughput, speed, confidentiality and privacy, which in turn enables alternate solutions via permissioned blockchains.\nHyperledger Fabric (referred to as \u0026lsquo;Fabric\u0026rsquo; in the rest of this article) is the leading permissioned blockchain framework, initially developed by IBM. There are other players in this space, including Multichain, ChainCore and the relatively new entrant - Microsoft\u0026rsquo;s CoCo framework (referred to as \u0026lsquo;CoCo\u0026rsquo; in the rest of this article). Ethereum\u0026rsquo;s own developers are also working on enabling Enterprise use cases. The Enterprise Ethereum Alliance is a community of industry experts developing features and enhancements to Ethereum for Enterprise needs. This article focuses on Hyperledger Fabric and CoCo framework only.\nThe projects in the Linux Foundation\u0026rsquo;s Hyperledger suite are a collection of solutions based on various blockchain technologies. The Hyperledger architecture allows for different components to be plugged in to serve various use-cases, trust level and fault tolerance requirements. The ledgers in this collection are not components of one complete solution, but standalone solutions with various differentiated characteristics. You can choose the one applicable to your business scenario and requirements. Fabric is one of those solutions and it is a complete blockchain solution, including blockchain protocol(s) and smart contract (called Chain Code in Fabric architecture) execution. The tools in the Hyperledger collection (Cello, Composer and Explorer) do work as a component of a complete solution - mostly with Fabric at the moment, as far as I can tell. Hyperledger is available for production use and and it is already being used in developing real-world blockchain solutions.\nCoco is an open source platform created by Microsoft. It’s not a standalone blockchain protocol, it is a framework which can be integrated with blockchain protocols such as Ethereum, Quorum, Corda and also Hyperledger Sawtooth to deliver complete, enterprise grade blockchain solutions. The integration with Ethereum is the result of an adapted Ethereum codebase, which is integrated with CoCo Framework. Ethereum provides Smart Contract code execution, transaction processing and distributed ledger model. CoCo framework provides secure execution environment, flexible confidentiality models and codified governance. CoCo Framework was announced in August 2017. There is a whitepaper and a demo of a Proof-Of-Concept integration of CoCo with Ethereum. Ethereum integration is being hardened, integration with other blockchain platforms (Quorum, Corda and Sawtooth) is in progress and the CoCo source code will be open sourced in early 2018.\nCoCo provides smart contract code and execution security via Trusted Execution Environments (TEE). The TEEs can be software (Hyper-V VSM) based or hardware (Intel SGX) based. Fabric does not include guarantees of execution integrity via TEEs, although another ledger (Hyperledger Sawtooth) in the collection does. Hyperledger Sawtooth\u0026rsquo;s use of TEEs is limited to ensuring the integrity of its leader election consensus algorithm only. CoCo\u0026rsquo;s use of TEEs seem to be more encompassing and it includes execution guarantees and security for the smart contract code itself.\nClearly, Fabric and CoCo take very different architectural approach. There are functional similarities between the two frameworks. For example, the Channels in Fabric provide the mechanism for flexible confidentiality models, which is provided by ACLs in CoCo. TEEs in CoCo provide the same function as Endorsers in Fabric. Fabric has the concept of Validator nodes, such nodes are not needed in CoCo due to TEEs. Composer is a tool to quickly spin up proof-of-concept implementations with Fabric. Microsoft\u0026rsquo;s App Builder is a tool (I am currently participating in its private preview) to do the same with Ethereum as well as Fabric. App Builder does not currently work with CoCo, but I will not be surprised to see CoCo support in the future.\nThe default consensus algorithm in CoCo, Paxos consensus, does not provide Byzantine fault tolerance. On the surface, it appears to be a letdown, but Byzantine fault tolerance is made (mostly) redundant due to use of TEEs. There are some considerations to mitigate compromise of CoCo VNs (Validating Nodes). Refer to the CoCo whitepaper for more information on that. Note that the consensus algorithm in CoCo is pluggable, like Fabric. The business logic of the Smart Contracts in CoCo can be written in the programming language supported by the underlying execution engine. Which means, you can use Solidity to write your Smart Contracts in CoCo today. You can use Go to write smart contracts in Fabric.\nThe choice of blockchain framework, ledger and consensus model requires review and analysis of your particular business use case which translates to throughput, latency, confidentiality, governance and network requirements.\nReferences:\nHyperledger Fabric CoCo Framework Etherum Enterprise Alliance Hyperledger Docs Hyperledger Architecture (Consensus) [CoCo Framework WhitePaper](https://github.com/Azure/coco-framework/blob/master/docs/Coco%20Framework whitepaper.pdf) Hyperledger Sawtooth (Intel) Understanding Blockchain Consensus Models Image Credit: Davidstankiewicz, Blockchain Illustration 2, CC BY-SA 4.0\nHyperledger, IBM, Microsoft, Coco, Etheruem and associated trademarks belong to their respective owners.\n","permalink":"https://www.tewari.info/2017/11/24/blockchains-for-enterprise/","summary":"\u003cp\u003ePermissioned blockchains are being developed and used in Enterprise scenarios in which higher transaction throughput, lower latency, versatile confidentiality and governance models are more important than supporting low trust levels among participants. These Enterprise requirements are not being met adequately by the public and permission-less blockchain ledgers. Enterprise scenarios typically have known actors and the trust level between these actors is very high. This allows for trade-offs between trust levels and transaction throughput, speed, confidentiality and privacy, which in turn enables alternate solutions via \u003ca href=\"https://www.ibm.com/blogs/blockchain/2017/05/the-difference-between-public-and-private-blockchain/\"\u003epermissioned blockchains\u003c/a\u003e.\u003c/p\u003e","title":"Blockchains for Enterprise"},{"content":"1. Create the table in Microsoft Excel.\n2. Open this page in browser: http://excel2jira.bluurgh.com/\n3. Paste the table from Microsoft Excel into the input box on the page.\n4. Click on “Convert Me Now” button\n5. Place the cursor at the intended insertion point in the wiki document.\n6. Click on “Insert more content” (+) button on Wiki toolbar\n7. Click on “Markup”\n8. Paste converted markup from step 2 in the left pane and verify the preview.\n9. Click on “Insert”\n10. Review and verify the inserted content and make any correction if needed.\n","permalink":"https://www.tewari.info/2017/09/18/paste-table-from-microsoft-excel-to-confluence-wiki/","summary":"\u003cp\u003e1. Create the table in Microsoft Excel.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/paste-table-confluence-excel.png\"\u003e\u003cimg alt=\"paste-table-confluence-excel\" loading=\"lazy\" src=\"/wp-content/paste-table-confluence-excel.png\"\u003e\u003c/a\u003e\u003ca href=\"/wp-content/paste-table-confluence-toolbar.png\"\u003e\u003cimg alt=\"paste-table-confluence-toolbar\" loading=\"lazy\" src=\"/wp-content/paste-table-confluence-toolbar.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e2. Open this page in browser: \u003ca href=\"http://excel2jira.bluurgh.com/\"\u003ehttp://excel2jira.bluurgh.com/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e3. Paste the table from Microsoft Excel into the input box on the page.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/paste-table-confluence-convert-markup.png\"\u003e\u003cimg alt=\"paste-table-confluence-convert-markup\" loading=\"lazy\" src=\"/wp-content/paste-table-confluence-convert-markup.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e4. Click on “Convert Me Now” button\u003c/p\u003e\n\u003cp\u003e5. Place the cursor at the intended insertion point in the wiki document.\u003c/p\u003e\n\u003cp\u003e6. Click on “Insert more content” (+) button on Wiki toolbar\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/paste-table-confluence-toolbar.png\"\u003e\u003cimg alt=\"paste-table-confluence-toolbar\" loading=\"lazy\" src=\"/wp-content/paste-table-confluence-toolbar.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e7. Click on “Markup”\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/paste-table-confluence-markup-cmd.png\"\u003e\u003cimg alt=\"paste-table-confluence-markup-cmd\" loading=\"lazy\" src=\"/wp-content/paste-table-confluence-markup-cmd.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e8. Paste converted markup from step 2  in the left pane and verify the preview.\u003c/p\u003e","title":"Paste Table from Microsoft Excel to Confluence Wiki"},{"content":"Ethereum Blockchain (EBaas) as a Service provided by Microsoft Azure and ConsenSys allows for enterprise customers and partners to play, learn, and fail fast at a low cost in a ready-made dev/test/production environment. It will allow them to create private, public and consortium based Blockchain environments very quickly in Azure. In this session, you will learn how to get started with prototyping building blocks of a decentralized application using EBaas in Windows Azure.\nVenue: Triangle Azure User Group\nSlides : download.\n","permalink":"https://www.tewari.info/2016/10/18/ethereum-blockchain-as-a-service-in-azure-cloud/","summary":"\u003cp\u003e\u003ca href=\"https://www.ethereum.org/\"\u003eEthereum\u003c/a\u003e Blockchain (EBaas) as a Service provided by Microsoft Azure and \u003ca href=\"https://consensys.net/ventures/core-components/\"\u003eConsenSys\u003c/a\u003e allows for enterprise customers and partners to play, learn, and fail fast at a low cost in a ready-made dev/test/production environment. It will allow them to create private, public and consortium based \u003ca href=\"https://en.wikipedia.org/wiki/Blockchain\"\u003eBlockchain\u003c/a\u003e environments very quickly in Azure. In this session, you will learn how to get started with prototyping building blocks of a decentralized application using \u003ca href=\"http://https://azure.microsoft.com/en-us/blog/ethereum-blockchain-as-a-service-now-on-azure/\"\u003eEBaas\u003c/a\u003e in Windows Azure.\u003c/p\u003e","title":"Ethereum Blockchain-As-A-Service in Azure Cloud"},{"content":"Smart Contracts are an exciting innovation built on blockchain technology. It is a way to execute code in a trustless, decentralized and transparent system. Ethereum is a decentralized platform to run smart contracts using a variation of Bitcoin\u0026rsquo;s blockchain technology.\nIn this session, you will learn how to write smart contracts in Visual Studio. You will learn how to deploy them to public Ethereum blockchain and a private/consortium blockchain as a service in Azure. You will be introduced you to Solidity- the programming language used to write smart contracts. You will get familiar with the tools and technology around this exciting, promising and relatively new innovation.\nPresentation Slides are here: download.\n","permalink":"https://www.tewari.info/2016/09/30/getting-started-with-smart-contracts-on-ethereum-blockchain-using-visual-studio/","summary":"\u003cp\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Smart_contract\"\u003eSmart Contracts\u003c/a\u003e are an exciting innovation built on blockchain technology. It is a way to execute code in a trustless, decentralized and transparent system. \u003ca href=\"https://www.ethereum.org/\"\u003eEthereum\u003c/a\u003e is a decentralized platform to run smart contracts using a variation of Bitcoin\u0026rsquo;s blockchain technology.\u003c/p\u003e\n\u003cp\u003eIn this session, you will learn how to write smart contracts in Visual Studio. You will learn how to deploy them to public Ethereum blockchain and a private/consortium blockchain as a service in Azure. You will be introduced you to \u003ca href=\"https://solidity.readthedocs.io/en/develop/\"\u003eSolidity\u003c/a\u003e- the programming language used to write smart contracts. You will get familiar with the tools and technology around this exciting, promising and relatively new innovation.\u003c/p\u003e","title":"Getting Started with Smart Contracts on Ethereum Blockchain using Visual Studio"},{"content":"KeyNode is a application to issue and verify software license keys. Technology stack for KeyNode is Node.j s, MongoDB and Microsoft Azure.\nI had built this functionality with C9.io (a cloud-based IDE with a built-in source code repository and debugger), mongohq (MongoDB as a service - now part of compose.io) and appfog (Cloud PAAS built on top of CloudFoundry). It used SMTP/gmail to email license files. That was the version I created a couple of years ago to issue tamper-proof signed xml license files for CodeDemo (a code snippet tool for developers, presenters and instructors).\nFor KeyNode (open source) I switched to a different toolset : Visual Studio Code and Windows Azure, simplified the code to remove signed xml file and open-sourced it on GitHub. Signed xml allowed offline verification in CodeDemo (a Wpf/Desktop app). Removing signed xml requires verification to happen online. I am working on adding the web endpoint for verification of license keys. This version uses SendGrid to email license keys. KeyNode is deployed as a Windows Azure Web App. The Azure Web App is on Continuous Deployment feed from the source code repository on GitHub.\nI created and tested this Node.js application locally without IIS and deployed it as an Azure Web App without making any changes to the code at all. Node.js applications are hosted in Azure under IIS with iisnode. Iisnode is a native IIS module that allows hosting of node.js applications in IIS on Windows. Read more about iisnode here. Iisnode architecture also makes it significantly easier to take advantages of scalability afforded by Azure.\nKeyNode is a work in progress. My plan is to use this as the basis for further explorations in the following areas :\nDevOps, Docker and Microservices (at miniature scale of course!) Create a Web UI with Express(a Node.js web application framework) Integrate with Azure Storage/Queues and more\u0026hellip; I invite you to check out the live site on Azure and fork it for your own experiments : KeyNode on GitHub.\nResources :\nNode.js Developer Center Hosting Node.js Applications in IIS on Windows Top Benefits of Running Node.js on Windows Azure Photo Credit : Piano Keyboard (www.kpmalinowski.pl)\n","permalink":"https://www.tewari.info/2016/03/10/keynode-with-node-js-and-microsoft-azure/","summary":"\u003cp\u003e\u003ca href=\"https://github.com/ashtewari/keynode\" title=\"KeyNode\"\u003eKeyNode\u003c/a\u003e is a application to issue and verify software license keys. Technology stack for KeyNode is \u003ca href=\"https://nodejs.org/\" title=\"Node.js\"\u003eNode.j\u003c/a\u003e s, \u003ca href=\"https://www.mongodb.org/\" title=\"MongoDB\"\u003eMongoDB\u003c/a\u003e and \u003ca href=\"https://azure.microsoft.com/\" title=\"Microsoft Azure\"\u003eMicrosoft Azure\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI had built this functionality with \u003ca href=\"https://c9.io\" title=\"C9.io\"\u003eC9.io\u003c/a\u003e (a cloud-based IDE with a built-in source code repository and debugger), \u003ca href=\"http://www.prnewswire.com/news-releases/mongohq-becomes-compose-270174611.html\"\u003emongohq\u003c/a\u003e (MongoDB as a service - now part of \u003ca href=\"https://www.compose.io/\" title=\"compose.io\"\u003ecompose.io\u003c/a\u003e) and \u003ca href=\"https://www.ctl.io/appfog/\" title=\"AppFog\"\u003eappfog\u003c/a\u003e (Cloud PAAS built on top of \u003ca href=\"https://www.cloudfoundry.org/\" title=\"CloudFoundry\"\u003eCloudFoundry\u003c/a\u003e). It used SMTP/gmail to email license files. That was the version I created a couple of years ago to issue tamper-proof signed xml license files for \u003ca href=\"http://codedemo.net/\"\u003eCodeDemo\u003c/a\u003e (a code snippet tool for developers, presenters and instructors).\u003c/p\u003e","title":"KeyNode with Node.js and Microsoft Azure"},{"content":"Splunk Powershell Resource Kit is a convenient and very capable wrapper over Splunk REST API. You can use the Powershell commandlets exposed by this resource kit to deploy, check and manage splunk services as well as execute splunk searches. In this post, you will be introduced to the Splunk Powershell Resource Kit, you will learn how to use powershell commandlets to connect to a splunk instance and execute searches.\n1. First, you will need to download the resource kit from github. 2. Installation is very simple. All you have to do is download and extract the files from the zip archive and double click on install.bat to install the splunk powershell module. 3. Open Windows Powershell console from Windows Start menu. 4. Verify that the Splunk module is installed by executing Get-Module commandlet.\nGet-Module SplunkSearch 5. Import splunk resource kit commandlets using Import-Module command.\nImport-Module -Name Splunk 6. Next, you need to use Get-Credentials and then Connect-Splunk commandlets to connect to splunk. You need to do this once per session or if you need to switch to a different splunk instance.\n$credential = Get-Credential Connect-Splunk -Credential $credential -ComputerName localhost I have a local Splunk Enterprise instance running on my machine, so I am using localhost as the ComputerName to connect to it. If you have a SplunkCloud subscription you can use YourSubscriptionId.splunkcloud.com as the ComputerName to connect to your subscription. Like so -\nConnect-Splunk -Credential $credential -ComputerName MySubscription.splunkcloud.com 7. Next, use Search-Splunk commandlet to execute searches -\nSearch-Splunk -Search \u0026#34;Error\u0026#34; Here is a sample script:\n$lastDay = ( get-date ).addDays( -1 ).toString( ‘s’ ) $searches = @( \u0026#34;ERROR\u0026#34; , \u0026#34;source=\u0026#34;\u0026#34;tutorialdata.zip:*\u0026#34;\u0026#34; ERROR\u0026#34; , \u0026#34;CreditDoesNotMatch\u0026#34; ,\u0026#34;source=\u0026#34;\u0026#34;tutorialdata.zip:.\\\\www3/access.log\u0026#34;\u0026#34; productId=WC-SH-G04\u0026#34; ) Write-Output $lastDay foreach($search in $searches) { $qry = $search + \u0026#34; | stats count\u0026#34; Write-Output $qry Search-Splunk -Search $qry -StartTime $lastDay | Select-Object -ExpandProperty Count } The sample script executes multiple Splunk searches and outputs the count of results matching these search queries. Note that I am \u0026ldquo;-StartTime\u0026rdquo; parameter to scope the search to a narrower time window and \u0026ldquo;stats count\u0026rdquo; command to get the count of results. You can get this sample script as a github gist.\nYou can also use -EndTime and –MaxReturnCount to further constrain the query results and Format-List, Format-Table, Format-Wide commands to format the results. You can learn more about other Search parameters as well as other capabilities exposed in the resource kit documentation.\nResources :\nSplunk Powershell ResourceKit Splunk Powershell ResourceKit on github Splunk Powershell ResourceKit Documentation Image credit : terminal by Andrea Mazzini from the Noun Project\n","permalink":"https://www.tewari.info/2016/02/22/using-powershell-with-splunk/","summary":"\u003cp\u003e\u003ca href=\"http://dev.splunk.com/view/splunk-powershell-resource-kit/SP-CAAADRU\" title=\"Splunk Powershell Resource Kit\"\u003eSplunk Powershell Resource Kit\u003c/a\u003e is a convenient and very capable wrapper over \u003ca href=\"http://www.splunk.com/\"\u003eSplunk\u003c/a\u003e \u003ca href=\"http://dev.splunk.com/restapi\"\u003eREST API\u003c/a\u003e. You can use the \u003ca href=\"https://msdn.microsoft.com/en-us/powershell\"\u003ePowershell\u003c/a\u003e commandlets exposed by this resource kit to deploy, check and manage splunk services as well as execute splunk searches. In this post, you will be introduced to the Splunk Powershell Resource Kit, you will learn how to use powershell commandlets to connect to a splunk instance and execute searches.\u003c/p\u003e\n\u003cp\u003e1. First, you will need to download the resource kit from \u003ca href=\"https://github.com/splunk/splunk-reskit-powershell\"\u003egithub\u003c/a\u003e.\n2. Installation is very simple. All you have to do is download and extract the files from the zip archive and double click on install.bat to install the splunk powershell module.\n3. Open Windows Powershell console from Windows Start menu.\n4. Verify that the Splunk module is installed by executing Get-Module commandlet.\u003c/p\u003e","title":"Using Powershell with Splunk"},{"content":"PackRaft is a cross-platform mobile application built with Xamarin. It integrates with Microsoft Azure services, such as Azure Table Storage and Azure App Service. It is created with Xamarin.Forms for iOS and Android (Windows version will be coming soon).\nThe purpose of creating this sample application was to expand expertise in cross-platform mobile development with Windows Azure integration, specifically with Xamarin.Forms and Azure App Service. With Xamarin.Forms, it is possible to achieve close to 100% code reuse across these platforms for certain type of apps. Azure App Service provide a set of rich cloud backend services for your mobile applications.\nPackRaft allows the user to setup a fleet of vehicles of various seating capacities. Groups of riders are assigned to these rides according to the count of riders in each group. You can specify that certain groups be kept together on a single vehicle - and the app tries to honor those requests if possible. I did this via a rudimentary implementation of a bin packing algorithm. This implementation is deployed as an API App in Microsoft Azure.\nPackRaft uses Azure Mobile Services SDK to persist Fleet data to Azure Table Storage and to authenticate users with Facebook and Microsoft accounts. Twitter and Google account authentication is also supported by Azure Mobile Services SDK out of the box and those will also be enabled in PackRaft soon.\nPackRaft is available on Android, iPhone and iPad. ","permalink":"https://www.tewari.info/2015/12/19/packraft-with-xamarin-and-microsoft-azure/","summary":"\u003cp\u003ePackRaft is a cross-platform mobile application built with \u003ca href=\"http://developer.xamarin.com/\"\u003eXamarin\u003c/a\u003e. It integrates with Microsoft Azure services, such as \u003ca href=\"https://azure.microsoft.com/en-us/services/storage/tables/\"\u003eAzure Table Storage\u003c/a\u003e and \u003ca href=\"https://azure.microsoft.com/en-us/services/app-service/\"\u003eAzure App Service\u003c/a\u003e. It is created with \u003ca href=\"http://developer.xamarin.com/guides/cross-platform/xamarin-forms/\"\u003eXamarin.Forms\u003c/a\u003e for iOS and Android (Windows version will be coming soon).\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/packraft-android-riders.png\"\u003e\u003cimg alt=\"packraft-android-riders\" loading=\"lazy\" src=\"/wp-content/packraft-android-riders.png\"\u003e\u003c/a\u003e\u003ca href=\"/wp-content/packraft-iphone-assignments.png\"\u003e\u003cimg alt=\"packraft-iphone-assignments\" loading=\"lazy\" src=\"/wp-content/packraft-iphone5.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe purpose of creating this sample application was to expand expertise in cross-platform mobile development with Windows Azure integration, specifically with Xamarin.Forms and Azure App Service. With Xamarin.Forms, it is possible to achieve close to 100% code reuse across these platforms for certain type of apps. Azure App Service provide a set of rich cloud backend services for your mobile applications.\u003c/p\u003e","title":"PackRaft with Xamarin and Microsoft Azure"},{"content":"Xamarin\u0026rsquo;s cross-platform mobile application framework has Xamarin.iOS and Xamarin.Android at its core. Both Xamarin.Android and Xamarin.iOS are based on Mono. Mono is an open source implementation of .NET (CLI and CLS). Xamarin\u0026rsquo;s customers are Microsoft (.NET) shops. Microsoft is open sourcing .NET itself. What does all this mean for Xamarin?\nIs Xamarin\u0026rsquo;s competitive advantage going to be undermined by the open source .NET? Microsoft\u0026rsquo;s Universal Application Platform (UAP) and the promise of making .NET applications run on Mac and Linux seems to indicate that Microsoft may be emerging as a threat to Xamarin.\nThe formidable Microsoft has perhaps spelled death for Xamarin by standing up a competitor to Mono. If you are a developer getting started with Xamarin or already using Xamarin, should you be worried? After all Xamarin has a significant learning curve. Just because you are proficient with C# and Visual Studio does not mean that learning curve of cross-platform development with Xamarin is insignificant. I have worked with Xamarin platform for more than two years. As you get into Xamarin development, you quickly realize that you need to know and learn quite a lot about the platforms that you are developing for. So, should you put your time and money into Xamarin? Should you (continue to) invest in Xamarin? Does Xamarin have a future?\nXamarin\u0026rsquo;s core competitive advantage is not in competition with the (.NET Core) class libraries, SDKs and server frameworks being open sourced by Microsoft. Xamarin\u0026rsquo;s competitive advantage is in the ecosystem of development and testing tools as well as infrastructure that supports cross-platform mobile development, testing and monitoring. Xamarin marvelously simplifies creation of native apps on iOS and Android using C# (now F# also). The pace of innovation at Xamarin is breathtaking. There is nothing quite like it to enable cross-platform development of native mobile applications with Microsoft\u0026rsquo;s flagship programming language at its core and the incredible productivity allowed by Microsoft\u0026rsquo;s and 3rd party tool set.\nI think both Microsoft and Xamarin are going to greatly benefit from the formation of .NET Foundation and open sourcing of .NET as well as cross-platform implementation of .NET. Keep in mind that while Mono is open source, Xamarin.Android and Xamarin.iOS are commercial products. Xamarin is going to benefit immensely by Mono closing the gaps with .NET BCL implementation and converged implementations of Mono and .NET in the near future, without giving up its core competitive advantages. Microsoft has seen the writing on the wall - The future belongs to Cloud and Mobile. Microsoft has a strong presence in Cloud, but not so much in Mobile. Microsoft is going to benefit from .NET running on Mac and Linux by expanding their customer base to those platforms in its cloud offerings in Azure. But Xamarin\u0026rsquo;s gains are also going to translate into broader and deeper mobile market penetration for Microsoft\u0026rsquo;s tools and technologies, benefiting Microsoft\u0026rsquo;s Cloud strategy even further. Xamarin\u0026rsquo;s success is strategically important to Microsoft. Now even more so.\nI think that Xamarin will continue to gain strength and remain a viable cross-platform development framework as far as I can see. Xamarin\u0026rsquo;s future looks very bright to me.\n","permalink":"https://www.tewari.info/2015/11/07/does-xamarin-have-a-future/","summary":"\u003cp\u003e\u003ca href=\"https://xamarin.com/\"\u003eXamarin\u003c/a\u003e\u0026rsquo;s cross-platform mobile application framework has Xamarin.iOS and Xamarin.Android at its core. Both \u003ca href=\"https://en.wikipedia.org/wiki/Xamarin\"\u003eXamarin.Android and Xamarin.iOS\u003c/a\u003e are based on Mono. \u003ca href=\"https://en.wikipedia.org/wiki/Mono_(software)\"\u003eMono\u003c/a\u003e is an open source implementation of .NET (\u003ca href=\"https://en.wikipedia.org/wiki/Common_Language_Infrastructure\"\u003eCLI\u003c/a\u003e and CLS). Xamarin\u0026rsquo;s customers are Microsoft (.NET) shops. Microsoft is open sourcing .NET itself. What does all this mean for Xamarin?\u003c/p\u003e\n\u003cp\u003eIs Xamarin\u0026rsquo;s competitive advantage going to be undermined by the open source .NET? Microsoft\u0026rsquo;s Universal Application Platform (UAP) and the promise of making .NET applications run on Mac and Linux seems to indicate that Microsoft may be emerging as a threat to Xamarin.\u003c/p\u003e","title":"Does Xamarin have a future?"},{"content":"You can create native Android and iOS applications using C#, with Xamarin. I explored the capabilities of Xamarin tools and the development experience with Xamarin to create an Android version of CensusMapper. CensusMapper displays U.S. Census data on a Map. I created the original application for Windows 8 (WinRT) using C#. I have since converted it to an MVVM (C#) application, HTML/Javascript (WinJS) version and more recently to a Universal Windows App running on Windows Phone 8.1 and Windows 8.1. In that tradition, now it is faithfully ported to run on Android devices, using C# and Xamarin. CensusMapper is available on Google Play Store.\nCensusMapper.Android shows population of each U.S. State. User can tap on a location on the map to show the population (as per 2010 census) of the zip code containing the selected location. User can select a location to view the population compared to the containing geography, as a pie-chart.\nThis experimental project helped me expand my cross-platform mobile application development skillset in the following areas:\nUsing Xamarin/C# to create an Android app using Xamarin Studio on a PC and a Mac. Structuring C#/.NET source code in a Portable Class Library to allow reuse on Windows, Windows Phone, Android and iOS platforms. Converting the functionality of an existing Windows Universal App (Windows Phone/ WinRT) to an Android app. Using GoogleMaps API (via Google Play Services) to display data retrieved from U.S. Census API. Using Bing Maps API for reverse geocoding in an Android app. Creating custom markers using low-level API in Android.Graphics namespace to display information on the map. Charting with oxyplot cross-platform charting library. Working with Android SDK, AVD Manager as well as developer documentation and resources on Android and Xamarin websites in the development lifecycle of the app. Publishing an app on Google Play Store. I started with Xamarin.Forms.Maps. It was quick and straight forward to create a Xamarin.Forms app. The tricky part was creating the custom markers (the shape of speech bubble) on the map, instead of using the default push-pin markers . I tried creating a CustomRender to create custom markers and built interactivity with the map elements, but it turned out to be too much hassle. All of that customization would be specific to Android platform only and not reusable on the iOS anyway. So, I decided against using Xamarin.Forms and work directly with Google Maps library. Xamarin.Forms also limits me to Windows Phone 8 compatibility in my PCL. I can\u0026rsquo;t use Windows Phone 8.1 in any PCL profile compatible with Xamarin.Forms. It also requires a minimum of Android 4.0. The PCL profile # 111 for sharing code between Windows 8, Windows Phone 8.1 as well as Android and iOS, is not compatible with Xamarin.Forms at the time of writing this.\nDon\u0026rsquo;t use the Android emulator for testing. Get a real device. I stopped using the emulator while working on CensusMapper because GooglePlayServices (GPS) dependency was making me jump through way too many hoops. Debugging map functionality on the real device was a much more productive experience. Then I discovered Xamarin\u0026rsquo;s Android Player. It is awesome. By all means, use it! It is a pleasure to work with, especially on a Mac. Don\u0026rsquo;t be discouraged by the preview/beta status. It blows the Android SDK virtual devices out of the water, in terms of performance and usability.\nI tested on Google Nexus 4 (Android 4.2), Samsung Galaxy SIII (Android 4.3) , BLU Dash JR (Android 4.4) and an older Coby Kyros tablet (Android 2.2). Google Play Services update, required for the app to work, could not be installed on BLU device because of the limited storage space. You must root the device in order to install the GPS updates on an SD card. It is advisable to have a root-friendly device. Google Nexus devices are excellent development devices, allowing you root access and the ability to load custom ROMs. However, it is very important for you to get a few different kinds of devices of various form factors and Android versions/API levels for testing your app\u0026rsquo;s functional and non-functional aspects.\nAndroid device logs and the IDE build logs are the most important tools you have to resolve problems encountered in the Android app development with Xamarin. These should be the first places to look when troubleshooting issue.\nVersions used in this project: Xamarin 3.8. Xamarin Studio 5.7 Xamarin Android 4.20.0\n","permalink":"https://www.tewari.info/2015/02/21/creating-android-apps-using-c-and-xamarin/","summary":"\u003cp\u003eYou can create native Android and iOS applications using C#, with Xamarin. I explored the capabilities of Xamarin tools and the development experience with Xamarin to create an Android version of CensusMapper. CensusMapper displays U.S. Census data on a Map. I created the original application for Windows 8 (WinRT) using C#. I have since converted it to an MVVM (C#) application, HTML/Javascript (WinJS) version and more recently to a \u003ca href=\"/2014/11/12/universal-apps/\"\u003eUniversal Windows App\u003c/a\u003e running on Windows Phone 8.1 and Windows 8.1. In that tradition, now it is faithfully ported to run on Android devices, using C# and Xamarin. CensusMapper is available on \u003ca href=\"https://play.google.com/store/search?q=CensusMapper\"\u003eGoogle Play Store\u003c/a\u003e.\u003c/p\u003e","title":"Creating Android Apps using C# and Xamarin"},{"content":"\nPackRaft is a cross-platform mobile application built with Xamarin. It integrates with Microsoft Azure services, such as Azure Table Storage and Azure App Service. It is created with Xamarin.Forms for iOS and Android.\nCensusMapper is a Windows 8 app that retrieves U.S. Census Data using Census API and displays that data on a map using Microsoft’s Bing Maps API. The application is built using XAML and C#.\nCensusMapper is also available on Android. Android version of the app was created using Xamarin and C#. Windigo is a Windows Phone App to access Diigo bookmarks.\nCodeDemo pastes code snippets into your favorite IDE without getting in your way. CodeDemo is for instructors, presenters and speakers who create instructional demos, record screen-casts or do live presentations.\nLRMS is a Windows Universal App created using Windows AppStudio. It provides news of Lufkin Road Middle School, NC, USA.\nIt can downloaded from Windows Phone Store as well as Windows Store.\nDbUpdater is a free tool to implement database schema version control.\nOpenSimSim is your password solution. You need to remember only one master password. OpenSimSim will generate strong passwords for each one of your accounts. No more using the same password everywhere or using bulky password managers. Your passwords are just a few quick key-strokes away.\n","permalink":"https://www.tewari.info/myprojects/","summary":"\u003cp\u003e\u003ca href=\"/2015/12/19/packraft-with-xamarin-and-microsoft-azure/\"\u003e\u003cimg alt=\"PackRaft-OnAndroid-Image\" loading=\"lazy\" src=\"/wp-content/packraft-android-riders-small.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/2015/12/19/packraft-with-xamarin-and-microsoft-azure/\"\u003ePackRaft\u003c/a\u003e is a cross-platform mobile application built with \u003ca href=\"http://developer.xamarin.com/\"\u003eXamarin\u003c/a\u003e. It integrates with Microsoft Azure services, such as \u003ca href=\"https://azure.microsoft.com/en-us/services/storage/tables/\"\u003eAzure Table Storage\u003c/a\u003e and \u003ca href=\"https://azure.microsoft.com/en-us/services/app-service/\"\u003eAzure App Service\u003c/a\u003e. It is created with \u003ca href=\"http://developer.xamarin.com/guides/cross-platform/xamarin-forms/\"\u003eXamarin.Forms\u003c/a\u003e for iOS and Android.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://play.google.com/store/apps/details?id=com.ashtewari.packmyride\u0026amp;utm_source=global_co\u0026amp;utm_medium=prtnr\u0026amp;utm_content=Mar2515\u0026amp;utm_campaign=PartBadge\u0026amp;pcampaignid=MKT-AC-global-none-all-co-pr-py-PartBadges-Oct1515-1\"\u003e\u003cimg alt=\"Get it on Google Play\" loading=\"lazy\" src=\"https://play.google.com/intl/en_us/badges/images/apps/en-play-badge.png\"\u003e\u003c/a\u003e\u003ca href=\"https://itunes.apple.com/us/app/packraft/id1059614859\"\u003e\u003cimg alt=\"Download iOS app on App Store\" loading=\"lazy\" src=\"/images/Download_on_the_App_Store_Badge_US-UK_135x40.svg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/2014/11/12/universal-apps/\"\u003e\u003cimg alt=\"Logo\" loading=\"lazy\" src=\"/wp-content/Logo.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/2014/11/12/universal-apps/\"\u003eCensusMapper\u003c/a\u003e is a Windows 8 app that retrieves U.S. Census Data using Census API and displays that data on a map using Microsoft’s Bing Maps API. The application is built using XAML and C#.\u003c/p\u003e","title":"Projects"},{"content":" Is Scrum Bad For Developers ? Session Recommendations for SoCal Code Camp @ USC Win Advanced MVVM Book Getting Started with MVVM ","permalink":"https://www.tewari.info/mycustompage/","summary":"\u003cul\u003e\n\u003cli\u003e\n\u003ch3 id=\"is-scrum-bad-for-developers-\"\u003e\u003ca href=\"/2009/06/30/is-scrum-bad-for-developers/\"\u003eIs Scrum Bad For Developers ?\u003c/a\u003e\u003c/h3\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch3 id=\"session-recommendations-for-socal-code-camp--usc\"\u003e\u003ca href=\"/2009/11/12/session-recommendations-for-socal-code-camp-usc/\"\u003eSession Recommendations for SoCal Code Camp @ USC\u003c/a\u003e\u003c/h3\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch3 id=\"win-advanced-mvvm-book\"\u003e\u003ca href=\"/2010/05/09/win-advanced-mvvm-book/\"\u003eWin Advanced MVVM Book\u003c/a\u003e\u003c/h3\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch3 id=\"getting-started-with-mvvm\"\u003e\u003ca href=\"/2010/11/06/getting-started-with-mvvm/\"\u003eGetting Started with MVVM\u003c/a\u003e\u003c/h3\u003e\n\u003c/li\u003e\n\u003c/ul\u003e","title":"MyCustomPage"},{"content":"","permalink":"https://www.tewari.info/blog/","summary":"","title":"blog"},{"content":"Blog Posts Universal Apps The story of Windows Universal Apps is the result of advancements in three areas: The platform convergence between Windows 8.1 and Windows Phone 8.1 The (ongoing) unification of Windows and Windows Phone stores. Shared Projects and other enhancements in Visual Studio 2013 Update 2 to support cross-platform development. I have written about my experience in converting an existing Windows 8 app, CensusMapper, to a Universal App on the AIS Blog. Read the article here. I have also created another Universal App, LRMS, using Windows App Studio. This app is available in both Windows and Windows Phone Stores. I gave a presentation at the Raleigh Code Camp this past weekend : Creating Universal Apps for Windows Phone 8.1 and Windows 8.1. Thanks […]\nShould my barber do a technology upgrade? I noticed a barber shop sign at a local strip mall last year and stepped inside, hoping to get a haircut. The lone barber turned away from the customer in his chair, looked at me and said, “Sorry, man. It is by appointment only”. It was relatively spacious place. There were no other waiting customers there. It felt peaceful and quiet. Local NPR station was playing on the radio. I took his card and left. I got my haircut somewhere else that weekend. Over the next month or so, I called him on Saturdays, for the hair cut appointment. He was booked. Every single weekend. I wised up and called him on Friday. I got the appointment for the next day. […]\nAnnouncing New CodeDemo Feature – ZoomIt Integration I am very excited to announce a new feature of CodeDemo. This feature integrates with ZoomIt and enables you to use ZoomIt much more fluently. ZoomIt is a great presentation tool. It helps speakers and presenters deliver very effective presentations. But many presenters are not using this great tool as much and as effectively as it can be used. The reason is that ZoomIt has a bit of a learning curve. It takes practice to use it fluently. You have a lot going on in your mind while you are doing a presentation. Using ZoomIt distracts you from your presentation. Practice helps you get over this distraction. A lot of presenters use ZoomIt very effectively with practice. But for the […]\n","permalink":"https://www.tewari.info/frontpage/","summary":"\u003ch3 id=\"blog-posts\"\u003eBlog Posts\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"/2014/11/12/universal-apps/\" title=\"Universal Apps\"\u003e\u003cimg alt=\"universal-apps-titile\" loading=\"lazy\" src=\"/wp-content/universal-apps-titile.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch4 id=\"universal-apps\"\u003e\u003ca href=\"/2014/11/12/universal-apps/\"\u003eUniversal Apps\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eThe story of Windows Universal Apps is the result of advancements in three areas: The platform convergence between Windows 8.1 and Windows Phone 8.1 The (ongoing) unification of Windows and Windows Phone stores. Shared Projects and other enhancements in Visual Studio 2013 Update 2 to support cross-platform development. I have written about my experience in converting an existing Windows 8 app, CensusMapper, to a Universal App on the AIS Blog. Read the article here. I have also created another Universal App, LRMS, using Windows App Studio. This app is available in both Windows and Windows Phone Stores. I gave a presentation at the Raleigh Code Camp this past weekend : Creating Universal Apps for Windows Phone 8.1 and Windows 8.1. Thanks […]\u003c/p\u003e","title":"FrontPage"},{"content":"The story of Windows Universal Apps is the result of advancements in three areas:\nThe platform convergence between Windows 8.1 and Windows Phone 8.1 The (ongoing) unification of Windows and Windows Phone stores. Shared Projects and other enhancements in Visual Studio 2013 Update 2 to support cross-platform development. I have written about my experience in converting an existing Windows 8 app, CensusMapper, to a Universal App on the AIS Blog. Read the article here. I have also created another Universal App, LRMS, using Windows App Studio. This app is available in both Windows and Windows Phone Stores.\nI gave a presentation at the Raleigh Code Camp this past weekend : Creating Universal Apps for Windows Phone 8.1 and Windows 8.1. Thanks to everyone who attended the presentation. The session slides for this presentation are available here : Download Slides.\n","permalink":"https://www.tewari.info/2014/11/12/universal-apps/","summary":"\u003cp\u003eThe story of Windows Universal Apps is the result of advancements in three areas:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThe platform convergence between Windows 8.1 and Windows Phone 8.1\u003c/li\u003e\n\u003cli\u003eThe (ongoing) unification of Windows and Windows Phone stores.\u003c/li\u003e\n\u003cli\u003eShared Projects and other enhancements in Visual Studio 2013 Update 2 to support cross-platform development.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/universal-apps-titile.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/universal-apps-titile.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI have written about my experience in converting an existing Windows 8 app, \u003ca href=\"http://blog.appliedis.com/2012/10/22/censusmapper-app-mashup-census-data-with-bing-maps/\"\u003eCensusMapper\u003c/a\u003e, to a Universal App on the \u003ca href=\"http://blog.appliedis.com/author/ash-tewari/\"\u003eAIS Blog\u003c/a\u003e. \u003ca href=\"http://blog.appliedis.com/2014/10/05/censusmapper-is-a-universal-app/\"\u003eRead the article here\u003c/a\u003e. I have also created another Universal App, LRMS, using Windows \u003ca href=\"http://appstudio.windows.com/\"\u003eApp Studio\u003c/a\u003e. This app is available in both \u003ca href=\"http://apps.microsoft.com/windows/en-us/app/454df9ae-7a9d-40f2-8caf-5266649939d9\"\u003eWindows\u003c/a\u003e and \u003ca href=\"http://www.windowsphone.com/en-us/store/app/lrms/497cb5bb-1d37-4c66-a200-912b39872f6c\"\u003eWindows Phone\u003c/a\u003e Stores.\u003c/p\u003e","title":"Universal Apps"},{"content":"I noticed a barber shop sign at a local strip mall last year and stepped inside, hoping to get a haircut. The lone barber turned away from the customer in his chair, looked at me and said, \u0026ldquo;Sorry, man. It is by appointment only\u0026rdquo;. It was relatively spacious place. There were no other waiting customers there. It felt peaceful and quiet. Local NPR station was playing on the radio. I took his card and left. I got my haircut somewhere else that weekend. Over the next month or so, I called him on Saturdays, for the hair cut appointment. He was booked. Every single weekend. I wised up and called him on Friday. I got the appointment for the next day. I did not get the slot I wanted, but I picked from a couple of open slots. I showed up for my appointment, and I have been going to him ever since.\nHe charges a bit more than some of the other haircut places, but he does not rush to move on to the next customer and my wife is impressed by my haircuts. Enough said. The best part is that he plays NPR in the shop. All day long. I can continue listening to This American Life, All Things Considered or Snap Judgment as I get out of my car and step inside the barber shop without missing much. There is a sense of privacy and exclusivity. It is perfect! And I love it!\nPhoto Credit : https://flic.kr/p/mer3eX\nHe is running an appointment-only business and the probability of you getting an appointment on the same day, or a time slot of your choice is pretty much zero. He takes calls on a regular (non-smart) phone and records his appointments on a paper pad with a pen. He takes cash. There is not much of hi-technology there to speak of. One day, we started talking about technology. I asked him if he has thought about using one of the online services to help him with his business. The customers could do self-serve appointments online and he will not be interrupted on his phone while he is with his customers. Customer will get automatic appointment reminders. The payments can also be done online. He could build a database of his customers, create a following on social media and generate more business.\nHe knew about all of these options. But he seemed reluctant. He wants to keep it personal. He wants to talk to his customers directly, because when they talk to him and get the appointment, they show up. \u0026ldquo;There a lot of people who would love to waste my time. They will book fake appointments online and not show up.\u0026rdquo;, he said, \u0026ldquo;And I don\u0026rsquo;t want customer\u0026rsquo;s credit card numbers. I don\u0026rsquo;t have the time to deal with credit card refunds and disputes. With a larger business, when there are a few more barbers in the shop, it would make sense to hire someone to be at the front desk and handle everything being dependent on additional technology entails, but not now.\u0026rdquo; The conversation continued for a few more minutes, but his reluctance to consider upgrading to newer technology was quite evident.\nHe seems to have three main concerns :\nHe wants only qualified/screened customers. He wants to keep his schedule full. He wants to keep things simple. He wants to avoid handling customer\u0026rsquo;s credit card information. He will personally need to transition to the new scheduling system. He wants an assistant to handle that. I would recommend a gradual transition. Here is a 10 point plan to get him started -\nCreate free accounts with some of the online scheduling services and get familiar with them. Appointy or ClickBook are a couple of services to try. They are not paying me to promote them. These are just two that stood out of many I researched. Start using a tablet device to create and update some dummy appointments. I would recommend going with a data plan with a cellular provider rather than the Wi-Fi option. It will be significantly less tech hassle for you that way. Just trust me on this. Use the online scheduling service trial for 2 weeks from the tablet device. Based on the trial experience, sign up with one of the services for a month-to-month plan. Handpick some of your regular customers and ask them to try the online scheduling service. Other customers will continue to call on your existing phone for new appointments, rescheduling or cancellations. Update the schedule on paper as well as online (using tablet). Continue to take cash. You will have the option to add online payments to the service for additional charge. You will not have to take the credit card numbers yourself. Do this for 3 months. 3 months are necessary to ensure at least two cycles with a set of customers. People tend to have haircuts every 3-6 weeks. Learn, evaluate and adapt. It is very important to plan for contingencies. What happens if the online scheduling service temporarily goes down? What if you drop and break your tablet in the middle of the day? Ditch the paper completely if you feel confident. Tell more customers about the online scheduling option and go from there. This exercise has reinforced my position that software exists to support the business. Not the other way around. To my barber, this is serious business. This is his livelihood. As techies, we tend to impart an importance to the technology for its own sake, but transitions and upgrades (if not executed and managed carefully) could be extremely detrimental to the business.\nWhether he upgrades or not, He will continue to have my business. I wish the best for him.\nUpdate : Since I wrote this, the barber shop has moved to a new location nearby. There are other barbers in the shop now. He is still by appointment only. His partners take walk-ins. There are large flat-panel TVs on the wall that sometimes play the local NPR channel. It is a busier place than before. Although the sense of privacy and exclusivity is not there anymore, I am still going there for haircuts, for now.\n","permalink":"https://www.tewari.info/2014/07/12/should-my-barber-do-a-technology-upgrade/","summary":"\u003cp\u003eI noticed a barber shop sign at a local strip mall last year and stepped inside, hoping to get a haircut. The lone barber turned away from the customer in his chair, looked at me and said, \u0026ldquo;Sorry, man. It is by appointment only\u0026rdquo;. It was relatively spacious place. There were no other waiting customers there. It felt peaceful and quiet. \u003ca href=\"http://wunc.org/\"\u003eLocal NPR station\u003c/a\u003e was playing on the radio. I took his card and left. I got my haircut somewhere else that weekend. Over the next month or so, I called him on Saturdays, for the hair cut appointment. He was booked. Every single weekend. I wised up and called him on Friday. I got the appointment for the next day. I did not get the slot I wanted, but I picked from a couple of open slots. I showed up for my appointment, and I have been going to him ever since.\u003c/p\u003e","title":"Should my barber do a technology upgrade?"},{"content":"I am very excited to announce a new feature of CodeDemo. This feature integrates with ZoomIt and enables you to use ZoomIt much more fluently.\nZoomIt is a great presentation tool. It helps speakers and presenters deliver very effective presentations. But many presenters are not using this great tool as much and as effectively as it can be used. The reason is that ZoomIt has a bit of a learning curve. It takes practice to use it fluently. You have a lot going on in your mind while you are doing a presentation. Using ZoomIt distracts you from your presentation. Practice helps you get over this distraction. A lot of presenters use ZoomIt very effectively with practice. But for the rest of us, ZoomIt mastery has been elusive.\nI have experimented and practiced (a lot) with several different ways to gain fluency with ZoomIt, including using custom keyboard combinations, but I could never get to the point where using ZoomIt feels like second nature. I realized that the mental and visual shift it takes to locate the keyboard combination and execute ZoomIt command with two fingers breaks the flow of the presentation and causes the distraction. I came up with a new way to use ZoomIt that has helped me immensely. And I added that as a feature in CodeDemo, so now you can use this method too.\nSome of you are familiar with CodeDemo. For those who are not, it is another new tool for presenters. I created this tool to make it easier to use code snippets in your presentations. ZoomIt integration is a new feature of CodeDemo. To use this feature -\nStart ZoomIt. If ZoomIt is not running, the commands will be simply ignored. If you use custom keyboard combinations in ZoomIt, you will need to reset them back to defaults - Ctrl+1 to Zoom Ctrl+2 to Draw Ctrl+4 to LiveZoom Start CodeDemo. Open a demo file. Any demo file will do. You must have a demo file open to call ZoomIt. If QuickStart.txt is already open in CodeDemo, you do not need to load another file. You can open Quickstart.txt file by clicking on the \u0026ldquo;Quickstart\u0026rdquo; button in the top menu. Now the key step - do a quick double-tap on the CTRL key. ZoomIt will be invoked and you will see a zoomed-in portion of your screen. At this point, you use ZoomIt as you normally do. Click to freeze the visual. Press Ctrl key and use the mouse to draw a rectangle on the screen. Double-tap on the CTRL key (or press ESCAPE key) to exit ZoomIt \u0026ldquo;Zoom\u0026rdquo;. You can also invoke ZoomIt \u0026ldquo;Draw\u0026rdquo; with a quick double-tap on the ALT key and ZoomIt \u0026ldquo;LiveZoom\u0026rdquo; with a quick double-tap on the SHIFT key. You may need to enable ZoomIt integration from the settings panel in CodeDemo : Invoking ZoomIt with a quick double-tap using just the index finger (or thumb) did the trick for me. I do not have to direct my attention to the keyboard anymore. The CTRL key is right there at the bottom corner of my keyboard and I can invoke ZoomIt without moving my eyes, my hand or my mind. There is only one thing to remember while using ZoomIt from CodeDemo - The CTRL key. That’s all. That one key will take care of 90% of what you need, to become effective with ZoomIt.\nYou can get CodeDemo from http://www.codedemo.net.\nPhoto Credit : http://thenounproject.com/term/gift/13360/\n","permalink":"https://www.tewari.info/2014/06/15/codedemo-zoomit-integration/","summary":"\u003cp\u003eI am very excited to announce a new feature of \u003ca href=\"http://www.codedemo.net\"\u003eCodeDemo\u003c/a\u003e. This feature integrates with \u003ca href=\"http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx\"\u003eZoomIt\u003c/a\u003e and enables you to use ZoomIt much more fluently.\u003c/p\u003e\n\u003cp\u003eZoomIt is a great presentation tool. It helps speakers and presenters deliver very effective presentations. But many presenters are not using this great tool as much and as effectively as it can be used. The reason is that ZoomIt has a bit of a learning curve. It takes practice to use it fluently. You have a lot going on in your mind while you are doing a presentation. Using ZoomIt distracts you from your presentation. Practice helps you get over this distraction. A lot of presenters use ZoomIt very effectively with practice. But for the rest of us, ZoomIt mastery has been elusive.\u003c/p\u003e","title":"Announcing New CodeDemo Feature - ZoomIt Integration"},{"content":"As software developers, many of us agonize over which programming language we should learn next. I have a suggestion - don\u0026rsquo;t learn another programming language. Learn a creative design skill - graphics design, 3-D modelling or Game Development. Learn basic photo editing skills instead of F#. I know Jamie and Chip will agree with me ;).\nI have a bit of a designer inside me. Not a lot. Just a bit. I was probably 15 when I learned how to do architectural perspective drawings. I created a few of the house renovation my dad was doing at the time. One of my dad\u0026rsquo;s friend asked me to create a drawing for the addition he was doing to his house. More recently, I have designed some logos (for my own use), as well as UI design of Windigo, a Windows Phone app I created a couple of years ago. These are some of the logos I have created :\nThe UI and UX design of apps is something that fascinates me and I can see myself indulging in that some more. I am one of those software developers who (think they) have some design chops. Although I have not asked her yet, but I am confident that my mother will completely agree with me on this. I think she is still saving some of the masterpieces from my kindergarten.\nI am excited about the addition of Digital Tutors content in the Pluralsight library. I am drooling at the prospect of learning some new skills from there. I browsed the entire library to see if I can latch on to something. I started looking for a software in the library that I can afford. You will be lucky to find one that is less than a few grands. I am exaggerating, but only a little. I also noticed an interesting trend that some of this software is being offered for rent! Here is a list of four that I could start using a little or no cost and it is not a trial :\nSculptris UDK Unity Vue - Personal Learning Edition I think it is awesome that Pixar has made its RenderMan software available for free for non-commercial use. RenderMan has been used to create movies like Frozen, IronMan 3, The Dark Knight and Pacific Rim. Pluralsight has the RenderMan covered as well.\nI will probably start with Unity first. I have already played around with it. I think it will be good to build on that. More on this later. Stay tuned.\nPhoto Credit : https://flic.kr/p/5FXV7r\n","permalink":"https://www.tewari.info/2014/05/31/do-not-learn-another-programming-language/","summary":"\u003cp\u003eAs software developers, many of us \u003ca href=\"http://www.sitepoint.com/best-programming-language-learn-2014/\"\u003eagonize\u003c/a\u003e over which \u003ca href=\"http://mashable.com/2014/01/21/learn-programming-languages/\"\u003eprogramming\u003c/a\u003e \u003ca href=\"http://beta.slashdot.org/story/08/03/18/1633229/what-programming-languages-should-you-learn-next\"\u003elanguage\u003c/a\u003e we should \u003ca href=\"http://www.reddit.com/r/learnprogramming/comments/1y02s2/which_programming_language_should_i_learn_next/\"\u003elearn\u003c/a\u003e \u003ca href=\"http://www.streamhead.com/what-programming-language-to-learn-next/\"\u003enext\u003c/a\u003e. I have a suggestion - don\u0026rsquo;t learn another programming language. Learn a creative design skill - graphics design, 3-D modelling or Game Development. Learn basic photo editing skills instead of F#. I know \u003ca href=\"https://twitter.com/jamie_dixon\"\u003eJamie\u003c/a\u003e and \u003ca href=\"https://twitter.com/ChipBurris\"\u003eChip\u003c/a\u003e will agree with me ;).\u003c/p\u003e\n\u003cp\u003eI have a bit of a designer inside me. Not a lot. Just a bit. I was probably 15 when I learned how to do architectural perspective drawings. I created a few of the house renovation my dad was doing at the time. One of my dad\u0026rsquo;s friend asked me to create a drawing for the addition he was doing to his house. More recently, I have designed some logos (for my own use), as well as UI design of \u003ca href=\"http://www.windigoapp.com/\"\u003eWindigo\u003c/a\u003e, a Windows Phone app I created a couple of years ago. These are some of the logos I have created :\u003c/p\u003e","title":"Do not learn another programming language"},{"content":"Extending Bootstrap is a new Bootstrap book by Christoffer Niska, published by Packt Publishing. The publisher contacted me to review the book after reading my blog post about my experiences with Bootstrap and LESS. I am glad I accepted to do this book review. I learned several ways to extend and use Bootstrap by reading this book.\nThe book is for intermediate to advanced level users of Bootstrap. It is a quick and to-the-point read. It may feel opinionated to some readers. It is a concise distillation of author\u0026rsquo;s real-world experience with the current state of the Bootstrap technology. It is perfect for individuals and teams who are looking to go beyond the basics with Bootstrap on their projects.\nIt is important to know that you will need to install XAMPP server and Node.js to follow along with some examples. Node is only needed for the steps needed to compile LESS style-sheets. For all other steps you can use Site44, or other ways to render your html and css. You might be able to use hosted node on C9.io to get the feel for the steps that require node, without having to mess around with a web server and node installation.\nAs you take your Bootstrap project to the next level, you will need a way to automate LESS compilation. Remember, you don\u0026rsquo;t want to use runtime LESS compilation in production due the performance hit it entails. Using RECESS and Grunt is probably the best way to compile/automate style-sheets, and this is what the author recommends. There are other ways to accomplish this automation, but it is good to know how to use these tools, regardless.\nThe book does a good job of describing how to customize javascript plugins that come bundled with Bootstrap with a clear and clean example, as well as enumerating the reasons to customize. The example used to extend a plugin in Chapter 6 is reusable. It is actually a template that you can use to create your own extensions to Bootstrap plugins. The step by step explanation of the extension is very instructive. Awesome!\nThe instructions to disable responsiveness in Chapter 7 should have some more explanation, in my opinion. Granted, that the book is intended for advanced users, but these instructions to remove some lines here and add some lines there, may feel a bit arbitrary to a user who may want to understand the reasoning behind these steps.\nChapter 8 is a listing of popular custom Bootstrap plugins that can be useful to you in your own projects. The listing describes the functionality exposed by the plugins. It does not go in-depth or into the internals of how the plugins work. If you need the functionality provided by these plugins, this information can save you valuable time you might otherwise waste looking for and trying less than optimal candidates.\nChapter 9 gives you a starting point for creating your own Bootstrap theme on top of Bootswatch.\nAll chapters follow the format of explaining the reasons why you might want to do things described in the chapter, and only then getting into the details and explanation of the steps. I would like to mention this again - this is a thin volume but packs a solid punch. It does not have very in-depth technical explanations. It does have the information you need to get started with taking your Bootstrap project to the next level. The book is an enjoyable read and flows very naturally. You can also use it to create a checklist of things to do when customizing your Bootstrap project.\n","permalink":"https://www.tewari.info/2014/05/26/extending-bootstrap-book-review/","summary":"\u003cp\u003e\u003ca href=\"http://www.packtpub.com/extending-bootstrap/book\"\u003eExtending Bootstrap\u003c/a\u003e is a new \u003ca href=\"http://getbootstrap.com/\"\u003eBootstrap\u003c/a\u003e book by \u003ca href=\"http://crisu83.me/\"\u003eChristoffer Niska\u003c/a\u003e, published by \u003ca href=\"http://www.packtpub.com/\"\u003ePackt Publishing\u003c/a\u003e. The publisher contacted me to review the book after reading my \u003ca href=\"http://blog.appliedis.com/2013/02/04/bootstrap-with-less/\"\u003eblog post\u003c/a\u003e about my experiences with Bootstrap and LESS. I am glad I accepted to do this book review. I learned several ways to extend and use Bootstrap by reading this book.\u003c/p\u003e\n\u003cp\u003eThe book is for intermediate to advanced level users of Bootstrap. It is a quick and to-the-point read. It may feel opinionated to some readers. It is a concise distillation of author\u0026rsquo;s real-world experience with the current state of the Bootstrap technology. It is perfect for individuals and teams who are looking to go beyond the basics with Bootstrap on their projects.\u003c/p\u003e","title":"Extending Bootstrap - Book Review"},{"content":"You may have questions like these - What are my NoSQL options in Windows Azure? Can I run MongoDB on linux on Windows Azure? Why would I want to do that? Which one of the NoSQL options are available as managed services? Are all kinds of NoSQL databases available? Are there any limitations? What are options for data analytics? Or may be you have questions like these - Is it true that NoSQL databases don\u0026rsquo;t have schema? Do they have indexes? What about Views? Should I choose MongoDB or Redis? What is eventual consistency? In this presentation, you will learn all about NoSQL technologies in Windows Azure Cloud Platform. And you will get get answers to questions like these. Carolina Code Camp - 2014\n","permalink":"https://www.tewari.info/2014/05/02/nosql-in-windows-azure/","summary":"\u003cp\u003eYou may have questions like these - What are my NoSQL options in Windows Azure? Can I run MongoDB on linux on Windows Azure? Why would I want to do that? Which one of the NoSQL options are available as managed services? Are all kinds of NoSQL databases available? Are there any limitations? What are options for data analytics?\nOr may be you have questions like these - Is it true that NoSQL databases don\u0026rsquo;t have schema? Do they have indexes? What about Views? Should I choose MongoDB or Redis? What is eventual consistency?\nIn this presentation, you will learn all about NoSQL technologies in Windows Azure Cloud Platform. And you will get get answers to questions like these.\nCarolina Code Camp - 2014\u003c/p\u003e","title":"NoSQL in Windows Azure"},{"content":"It is a challenge to use code snippets in presentations, demos and live coding sessions. I have struggled with this and seen many speakers jumping through hoops to assimilate code snippets in their demos. I had to create something to ease this pain.\nToday, I am announcing the general availability of CodeDemo. A tool for instructors, presenters and speakers who create instructional demos, record screen-casts or do live presentations. CodeDemo pastes code snippets into your favorite IDE without getting in your way.\nI decided not to open-source CodeDemo to challenge myself to an exercise in commercialization. I decided to learn about entrepreneurship, marketing, sales, licensing and other aspects of software commercialization. It has been an MBA\u0026rsquo;s worth of education so far. This journey is not over yet. I am taking the Lean approach of creating a Minimum Viable Product. The future of CodeDemo, its feature set and the price, will be shaped by the traction it gets in the market, the feedback from the customers as well as patterns of use reported by the users.\nHead over to http://codedemo.net to grab a copy for yourself. Let me know if find it useful - I will be very excited to hear from you.\nHere is a quick 2 minute introduction to CodeDemo :\n[youtube]aFn3boBAWjw[/youtube]\n","permalink":"https://www.tewari.info/2014/03/09/announcing-codedemo/","summary":"\u003cp\u003eIt is a challenge to use code snippets in presentations, demos and live coding sessions. I have struggled with this and seen many speakers jumping through hoops to assimilate code snippets in their demos. I had to create something to ease this pain.\u003c/p\u003e\n\u003cp\u003eToday, I am announcing the general availability of \u003ca href=\"http://codedemo.net/\" title=\"CodeDemo website\"\u003eCodeDemo\u003c/a\u003e. A tool for instructors, presenters and speakers who create instructional demos, record screen-casts or do live presentations. CodeDemo pastes code snippets into your favorite IDE without getting in your way.\u003c/p\u003e","title":"Announcing CodeDemo"},{"content":"TRINUG January Main Meeting\nYou will learn how to use MVVM in your own Windows 8 application - desktop/mobile You will learn MVVM fundamentals. You will see the contrast between an MVVM application and a non-MVVM application.\n","permalink":"https://www.tewari.info/2014/01/11/creating-windows-8-applications-with-mvvm/","summary":"\u003cp\u003eTRINUG January Main Meeting\u003c/p\u003e\n\u003cp\u003eYou will learn how to use MVVM in your own Windows 8 application - desktop/mobile\nYou will learn MVVM fundamentals. You will see the contrast between an MVVM application and a non-MVVM application.\u003c/p\u003e","title":"Creating Windows 8 applications with MVVM"},{"content":"Raleigh Code Camp 2013 is wrapping up this afternoon. The venue and the crowd was phenomenal. I really enjoyed presenting\u0026ldquo;Using Layer Diagrams - Keeping your MVVM code from turning into spaghetti\u0026rdquo;. Thanks to everyone who attended the presentation.\nJohn Sonmez, Our Keynote Speaker, made my day by accepting my request to attend my presentation. It was awesome to have him in the audience and to get feedback from him!\nI did not get the time to complete the raffle at the end of the presentation. But the folks who won the raffle should be getting an email from me with instructions to download their free license of CodeDemo (Professional).\nThe presentation slides can be downloaded from here : download.\n","permalink":"https://www.tewari.info/2013/11/09/raleigh-code-camp-2013/","summary":"\u003cp\u003e\u003ca href=\"http://codecamp.org/Raleigh\" title=\"Raleigh Code Camp\"\u003eRaleigh Code Camp 2013\u003c/a\u003e is wrapping up this afternoon. The venue and the crowd was phenomenal. I really enjoyed \u003ca href=\"http://codecamp.org/Raleigh/Sessions\"\u003epresenting\u003c/a\u003e\u0026ldquo;Using Layer Diagrams - Keeping your MVVM code from turning into spaghetti\u0026rdquo;. Thanks to everyone who attended the presentation.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/codecamp2013.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/codecamp2013.png\"\u003e\u003c/a\u003e\u003ca href=\"https://twitter.com/jsonmez\"\u003eJohn Sonmez\u003c/a\u003e, Our Keynote Speaker, made my day by accepting my request to attend my presentation. It was awesome to have him in the audience and to get feedback from him!\u003c/p\u003e","title":"Using Layer Diagrams – Keeping your MVVM code from turning into spaghetti"},{"content":"NCDevCon 2013 (tentative) session schedule is up. The topics seem quite interesting and varied : From \u0026ldquo;Web Penetration and Hacking Tools\u0026rdquo; (David Epler) to \u0026ldquo;Better UI/UX with Bootstrap : A Developer\u0026rsquo;s Primer\u0026rdquo; (Steve Keator) to \u0026ldquo;Getting Control of Your Asynchronous JavaScript\u0026rdquo; (Bucky Schwarz).\nI am picking the sessions to attend. Looks like I will be able attend around 11 sessions in 2 days, if that is all I do while I am there. Sometimes, there are good reasons to not attend a session :\nThe conferences are for networking as well as for learning. If I strike an interesting conversation with someone, I will not hesitate to skip a session. Sometimes, an impromptu group discussion sparks wonderful ideas and accelerate a thought process in a way which is unlikely to happen in a one-way presentation. If I am in such a discussion, I will gladly forego the opportunity to attend the next session. A follow-on discussion after a session, either with the presenter or with other attendee(s) may derail my planned schedule. Here is my pick of sessions (click the picture to enlarge):\nGreen highlights are the sessions I don’t want to miss.\nRed/pink highlights are the sessions I will most likely not attend due to one of these reasons :\nI have no interest in the topic. I already know the subject to the extent that attending a (seemingly) introductory session is not a valuable use of my time. After all, I can only attend one session out of five in a time-slot. The session description is too vague for me to make a decision at the moment and there is another session in that timeslot that I am very keen on attending. Yellow highlights are the sessions that I can\u0026rsquo;t make up my mind on. Any recommendations?\nWhich sessions are you attending?\n","permalink":"https://www.tewari.info/2013/09/09/ncdevcon-2013-schedule/","summary":"\u003cp\u003e\u003ca href=\"http://ncdevcon.com/\"\u003eNCDevCon 2013\u003c/a\u003e (tentative) session \u003ca href=\"http://www.ncdevcon.com/page.cfm/schedule\"\u003eschedule\u003c/a\u003e is up. The \u003ca href=\"http://ncdevcon.com/page.cfm/sessions-2013\"\u003etopics\u003c/a\u003e seem quite interesting and varied : From \u0026ldquo;Web Penetration and Hacking Tools\u0026rdquo; (David Epler) to \u0026ldquo;Better UI/UX with Bootstrap : A Developer\u0026rsquo;s Primer\u0026rdquo; (Steve Keator) to \u0026ldquo;Getting Control of Your Asynchronous JavaScript\u0026rdquo; (Bucky Schwarz).\u003c/p\u003e\n\u003cp\u003eI am picking the sessions to attend.  Looks like I will be able attend around 11 sessions in 2 days, if that is all I do while I am there. Sometimes, there are good reasons to not attend a session :\u003c/p\u003e","title":"NCDevCon 2013 Schedule"},{"content":"TRINUG - Data SIG, July 2013\nSQL Server Data Quality Services (DQS) is a knowledge-driven data quality product. DQS enables you to build a knowledge base and use it to perform a variety of critical data quality tasks, including correction, enrichment, standardization, and de-duplication of your data.\n","permalink":"https://www.tewari.info/2013/07/20/dqs-data-quality-services-in-sql-server-2012/","summary":"\u003cp\u003eTRINUG - Data SIG, July 2013\u003c/p\u003e\n\u003cp\u003eSQL Server Data Quality Services (DQS) is a knowledge-driven data quality product. DQS enables you to build a knowledge base and use it to perform a variety of critical data quality tasks, including correction, enrichment, standardization, and de-duplication of your data.\u003c/p\u003e","title":"DQS - Data Quality Services in SQL Server 2012"},{"content":"","permalink":"https://www.tewari.info/codedemolicense/","summary":"","title":"CodeDemo License"},{"content":"Thanks for your interest in CodeDemo. Here is the link to the free download of CodeDemo (Lite) : download.\nIf your presentation/demo consists of more than 20 steps or if you would like to create custom keys for your demo steps, then you might want to get the full version of CodeDemo : CodeDemo (Full).\nThanks. Keep in touch.\nAsh Tewari\n/\n","permalink":"https://www.tewari.info/confirmation/","summary":"\u003cp\u003eThanks for your interest in CodeDemo. Here is the link to the free download of CodeDemo (Lite) : download.\u003c/p\u003e\n\u003cp\u003eIf your presentation/demo consists of more than 20 steps or if you would like to create custom keys for your demo steps, then you might want to get the full version of CodeDemo : \u003ca href=\"http://gum.co/codedemo\" title=\"CodeDemo (Full)\"\u003eCodeDemo (Full)\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks. Keep in touch.\u003c/p\u003e\n\u003cp\u003eAsh Tewari\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/\" title=\"tewari.info\"\u003e/\u003c/a\u003e\u003c/p\u003e","title":"confirmation"},{"content":"The download link has been sent to your email address. Please check your email and click the link to download CodeDemo (Lite) for free. Please be sure to check the spam folder as well.\nThanks.\nAsh Tewari\n","permalink":"https://www.tewari.info/signup/","summary":"\u003cp\u003eThe download link has been sent to your email address.  Please check your email and click the link to download CodeDemo (Lite) for free. Please be sure to check the spam folder as well.\u003c/p\u003e\n\u003cp\u003eThanks.\u003c/p\u003e\n\u003cp\u003eAsh Tewari\u003c/p\u003e","title":"Signup"},{"content":"","permalink":"https://www.tewari.info/codedemo/","summary":"","title":"CodeDemo"},{"content":"I like the new Windows 8 experience. Start screen with live tiles is awesome. But I have been missing the Start Menu when I am on the desktop. There are plenty of rumours that Microsoft will bring back the Start Menu in the next version of Windows - Windows Blue. Until then, you can use one of many third party utilities for that functionality - ClassicShell, Start8 and Pokki.\nI started using Pokki. And I love it. It feels like my world is whole again. Pokki is free.\nIf you want to do what I did, after installing it, open settings\nand make these changes:\n","permalink":"https://www.tewari.info/2013/05/23/get-your-windows-8-start-menu-back-with-pokki/","summary":"\u003cp\u003eI like the new Windows 8 experience. Start screen with live tiles is awesome. But I have been missing the Start Menu when I am on the desktop. There are \u003ca href=\"http://www.redorbit.com/news/technology/1112841701/microsoft-bringing-back-the-start-button-for-windows-8-050913/\"\u003eplenty\u003c/a\u003e of \u003ca href=\"http://bits.blogs.nytimes.com/2013/05/07/after-bumpy-start-microsoft-rethinks-windows-8/\"\u003erumours\u003c/a\u003e that Microsoft will bring back the Start Menu in the next version of Windows - \u003ca href=\"http://www.zdnet.com/microsofts-windows-8-plan-blue-bring-back-the-start-button-boot-to-desktop-7000014075/\"\u003eWindows Blue\u003c/a\u003e. Until then, you can use one of many third party utilities for that functionality - \u003ca href=\"http://www.classicshell.com/\"\u003eClassicShell\u003c/a\u003e, \u003ca href=\"http://www.stardock.com/products/start8/\"\u003eStart8\u003c/a\u003e and \u003ca href=\"https://www.pokki.com/windows-8-start-menu\"\u003ePokki\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI started using \u003ca href=\"https://www.pokki.com/windows-8-start-menu\"\u003ePokki\u003c/a\u003e. And I love it. It feels like my world is whole again. Pokki is \u003ca href=\"https://www.pokki.com/windows-8-start-menu\"\u003efree\u003c/a\u003e.\u003c/p\u003e","title":"Get Your Windows 8 Start Menu Back With Pokki"},{"content":"Carolina Code Camp - 2013 You will learn how to structure your app\u0026rsquo;s code in a way that - improves maintainability - enables testability of your app\u0026rsquo;s UI behavior - reduces maintenance cost - enables cross-platform deployment\n","permalink":"https://www.tewari.info/2013/05/05/refactoring-to-mvvm-windows-8/","summary":"\u003cp\u003eCarolina Code Camp - 2013\nYou will learn how to structure your app\u0026rsquo;s code in a way that\n- improves maintainability\n- enables testability of your app\u0026rsquo;s UI behavior\n- reduces maintenance cost\n- enables cross-platform deployment\u003c/p\u003e","title":"Refactoring to MVVM (Windows 8)"},{"content":"A light weight development workflow with real-time website deployment.\nI recently built a sample website to illustrate how clean, semantic html markup can be maintained when using Bootstrap\u0026rsquo;s grid system. The solution is to use a css pre-processor to incorporate Bootstrap\u0026rsquo;s LESS based mixins into your own .less files and push the Bootstrap instructions down into your stylesheets. There are two ways to \u0026ldquo;compile\u0026rdquo; .less stylesheets - use a stand-alone LESS compiler or use less.js. I found it very convenient to use less.js (note that it is not recommended in production deployment). As I started working on developing the sample code I found it a bit cumbersome to work with an entire web application project in Visual Studio, considering I was working with some really simple sample client-side html, css. As I craved for an alternative, I stumbled on to a development workflow that is incredibly simple and a lot of fun. I call it the Site44 workflow. Site44 turns your dropbox folders into websites. And it is awesome! Here is what you do -\n1. Sign into Site44.com using your dropbox credentials.\n2. Create a new site (all you have to do is come up with a name). I named it \u0026ldquo;ash\u0026rdquo;. A sub-folder with this name will show up in your dropbox folder.\n3. Drag this folder to your Github for Windows screen and drop it there to create a github repo in that folder and push it to github.\n4. Smile and write code.\nAs you save your code. The changes are deployed in real-time to your website. You commit to your github repo as you please. If you revert to a different version/branch of our code from your git repo, that version will be deployed (almost) instantly to your website. I wish there was a .site44ignore feature in Site44, just like .gitignore. That will allow me to keep my .git folder (and some other files) from getting published to the website. Other than that, this worked out really well for me.\nI wrote about the experience of extending Bootstrap with LESS here : Bootstrap with LESS.\nHat tip to Justin Saraceno for introducing me to site44.\n","permalink":"https://www.tewari.info/2013/02/06/the-site44-workflow/","summary":"\u003cp\u003eA light weight development workflow with real-time website deployment.\u003c/p\u003e\n\u003cp\u003eI recently built \u003ca href=\"http://ash.site44.com/hero.html\"\u003ea sample website\u003c/a\u003e to illustrate \u003ca href=\"http://blog.appliedis.com/2013/02/04/bootstrap-with-less/\"\u003ehow clean, semantic html\u003c/a\u003e markup can be maintained when using \u003ca href=\"http://twitter.github.com/bootstrap/index.html\"\u003eBootstrap\u0026rsquo;s\u003c/a\u003e \u003ca href=\"http://twitter.github.com/bootstrap/scaffolding.html#gridSystem\"\u003egrid system\u003c/a\u003e. The solution is to use a \u003ca href=\"http://lesscss.org\"\u003ecss pre-processor\u003c/a\u003e to incorporate Bootstrap\u0026rsquo;s \u003ca href=\"http://lesscss.org\"\u003eLESS\u003c/a\u003e based \u003ca href=\"http://twitter.github.com/bootstrap/extend.html#built-with-less\"\u003emixins\u003c/a\u003e into your own .less files and push the Bootstrap instructions down into your stylesheets. There are two ways to \u0026ldquo;compile\u0026rdquo; .less stylesheets - use a \u003ca href=\"http://winless.org/\"\u003estand-alone LESS compiler\u003c/a\u003e or use \u003ca href=\"https://github.com/cloudhead/less.js\"\u003eless.js\u003c/a\u003e. I found it very convenient to use \u003ca href=\"https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.min.js\"\u003eless.js\u003c/a\u003e (note that it is not recommended in production deployment). As I started working on developing the sample code I found it a bit cumbersome to work with an entire web application project in Visual Studio, considering I was working with some really simple sample client-side html, css. As I craved for an alternative, I stumbled on to a development workflow that is incredibly simple and a lot of fun. I call it the Site44 workflow. Site44 turns your dropbox folders into websites. And it is awesome! Here is what you do -\u003c/p\u003e","title":"The Site44 Workflow"},{"content":"Practice and Game Schedule Calender Click here to view the calender online. Click here download the calender file that can be imported into Microsoft Outlook or most other desktop calender applications. Right-click here and copy the link address. You can use this address to add the shared calender to your google account. Once you have done that, the calender can be synced on your iPhone, iPad, Android and Windows Phone. Google Sync instructions are here : http://www.google.com/sync/index.html.\nPractice and Game Schedule for all Boys Mite teams [excel-interactive-view title=\u0026ldquo;Apex Basketball Schedule - Boys - Mites\u0026rdquo; filename=\u0026ldquo;Apex_BB_Boys_Mites\u0026rdquo; attribution=\u0026ldquo;http://www.apexnc.org/\u0026quot;]\nEvent Team Date Time Location Description Basketball Game PRAIRIE DOGS 01/05/13 9:00 AM Salem Middle School PRAIRIE DOGS VS PYTHONS Basketball Game PYTHONS 01/05/13 9:00 AM Salem Middle School PRAIRIE DOGS VS PYTHONS Basketball Game MATADORS 01/05/13 10:00 AM Salem Middle School MATADORS VS ZIPS Basketball Game ZIPS 01/05/13 10:00 AM Salem Middle School MATADORS VS ZIPS Basketball Game BOBCATS 01/05/13 11:00 AM Salem Middle School BOBCATS VS BUZZSAWS Basketball Game BUZZSAWS 01/05/13 11:00 AM Salem Middle School BOBCATS VS BUZZSAWS Basketball Game BAZOOKAS 01/05/13 12:00 PM Salem Middle School BAZOOKAS VS BISONS Basketball Game BISONS 01/05/13 12:00 PM Salem Middle School BAZOOKAS VS BISONS Basketball Game JACKHAMMERS 01/05/13 1:00 PM Salem Middle School JACKHAMMERS VS KINGS Basketball Game KINGS 01/05/13 1:00 PM Salem Middle School JACKHAMMERS VS KINGS Basketball Game THUNDERBOLTS 01/05/13 2:00 PM Salem Middle School THUNDERBOLTS VS YELLOW JACKETS Basketball Game YELLOW JACKETS 01/05/13 2:00 PM Salem Middle School THUNDERBOLTS VS YELLOW JACKETS Basketball Game VOLCANOS 01/05/13 3:00 PM Salem Middle School VOLCANOS VS BEARS Basketball Game BEARS 01/05/13 3:00 PM Salem Middle School VOLCANOS VS BEARS Basketball Game TIGERS 01/05/13 4:00 PM Salem Middle School TIGERS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 01/05/13 4:00 PM Salem Middle School TIGERS VS JUGGERNAUTS Basketball Game VOLCANOS 01/12/13 9:00 AM Salem Middle School VOLCANOS VS JACKHAMMERS Basketball Game JACKHAMMERS 01/12/13 9:00 AM Salem Middle School VOLCANOS VS JACKHAMMERS Basketball Game BEARS 01/12/13 10:00 AM Salem Middle School BEARS VS KINGS Basketball Game KINGS 01/12/13 10:00 AM Salem Middle School BEARS VS KINGS Basketball Game PYTHONS 01/12/13 11:00 AM Salem Middle School PYTHONS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 01/12/13 11:00 AM Salem Middle School PYTHONS VS JUGGERNAUTS Basketball Game PRAIRIE DOGS 01/12/13 12:00 PM Salem Middle School PRAIRIE DOGS VS TIGERS Basketball Game TIGERS 01/12/13 12:00 PM Salem Middle School PRAIRIE DOGS VS TIGERS Basketball Game MATADORS 01/12/13 1:00 PM Salem Middle School MATADORS VS BOBCATS Basketball Game BOBCATS 01/12/13 1:00 PM Salem Middle School MATADORS VS BOBCATS Basketball Game BISONS 01/12/13 2:00 PM Salem Middle School BISONS VS THUNDERBOLTS Basketball Game THUNDERBOLTS 01/12/13 2:00 PM Salem Middle School BISONS VS THUNDERBOLTS Basketball Game BAZOOKAS 01/12/13 3:00 PM Salem Middle School BAZOOKAS VS YELLOW JACKETS Basketball Game YELLOW JACKETS 01/12/13 3:00 PM Salem Middle School BAZOOKAS VS YELLOW JACKETS Basketball Game ZIPS 01/12/13 4:00 PM Salem Middle School ZIPS VS BUZZSAWS Basketball Game BUZZSAWS 01/12/13 4:00 PM Salem Middle School ZIPS VS BUZZSAWS Basketball Game BAZOOKAS 01/19/13 9:00 AM Salem Middle School BAZOOKAS VS THUNDERBOLTS Basketball Game THUNDERBOLTS 01/19/13 9:00 AM Salem Middle School BAZOOKAS VS THUNDERBOLTS Basketball Game BUZZSAWS 01/19/13 10:00 AM Salem Middle School BUZZSAWS VS BISONS Basketball Game BISONS 01/19/13 10:00 AM Salem Middle School BUZZSAWS VS BISONS Basketball Game YELLOW JACKETS 01/19/13 11:00 AM Salem Middle School YELLOW JACKETS VS TIGERS Basketball Game TIGERS 01/19/13 11:00 AM Salem Middle School YELLOW JACKETS VS TIGERS Basketball Game VOLCANOS 01/19/13 12:00 PM Salem Middle School VOLCANOS VS BOBCATS Basketball Game BOBCATS 01/19/13 12:00 PM Salem Middle School VOLCANOS VS BOBCATS Basketball Game MATADORS 01/19/13 1:00 PM Salem Middle School MATADORS VS PYTHONS Basketball Game PYTHONS 01/19/13 1:00 PM Salem Middle School MATADORS VS PYTHONS Basketball Game JACKHAMMERS 01/19/13 2:00 PM Salem Middle School JACKHAMMERS VS BEARS Basketball Game BEARS 01/19/13 2:00 PM Salem Middle School JACKHAMMERS VS BEARS Basketball Game KINGS 01/19/13 3:00 PM Salem Middle School KINGS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 01/19/13 3:00 PM Salem Middle School KINGS VS JUGGERNAUTS Basketball Game PRAIRIE DOGS 01/19/13 4:00 PM Salem Middle School PRAIRIE DOGS VS ZIPS Basketball Game ZIPS 01/19/13 4:00 PM Salem Middle School PRAIRIE DOGS VS ZIPS Basketball Game ZIPS 01/26/13 9:00 AM Salem Middle School ZIPS VS KINGS Basketball Game KINGS 01/26/13 9:00 AM Salem Middle School ZIPS VS KINGS Basketball Game PRAIRIE DOGS 01/26/13 10:00 AM Salem Middle School PRAIRIE DOGS VS VOLCANOS Basketball Game VOLCANOS 01/26/13 10:00 AM Salem Middle School PRAIRIE DOGS VS VOLCANOS Basketball Game BISONS 01/26/13 11:00 AM Salem Middle School BISONS VS YELLOW JACKETS Basketball Game YELLOW JACKETS 01/26/13 11:00 AM Salem Middle School BISONS VS YELLOW JACKETS Basketball Game BUZZSAWS 01/26/13 12:00 PM Salem Middle School BUZZSAWS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 01/26/13 12:00 PM Salem Middle School BUZZSAWS VS JUGGERNAUTS Basketball Game THUNDERBOLTS 01/26/13 1:00 PM Salem Middle School THUNDERBOLTS VS JACKHAMMERS Basketball Game JACKHAMMERS 01/26/13 1:00 PM Salem Middle School THUNDERBOLTS VS JACKHAMMERS Basketball Game PYTHONS 01/26/13 2:00 PM Salem Middle School PYTHONS VS BEARS Basketball Game BEARS 01/26/13 2:00 PM Salem Middle School PYTHONS VS BEARS Basketball Game BOBCATS 01/26/13 3:00 PM Salem Middle School BOBCATS VS TIGERS Basketball Game TIGERS 01/26/13 3:00 PM Salem Middle School BOBCATS VS TIGERS Basketball Game MATADORS 01/26/13 4:00 PM Salem Middle School MATADORS VS BAZOOKAS Basketball Game BAZOOKAS 01/26/13 4:00 PM Salem Middle School MATADORS VS BAZOOKAS Basketball Game JUGGERNAUTS 02/02/13 9:00 AM Salem Middle School JUGGERNAUTS VS BISONS Basketball Game BISONS 02/02/13 9:00 AM Salem Middle School JUGGERNAUTS VS BISONS Basketball Game YELLOW JACKETS 02/02/13 10:00 AM Salem Middle School YELLOW JACKETS VS MATADORS Basketball Game MATADORS 02/02/13 10:00 AM Salem Middle School YELLOW JACKETS VS MATADORS Basketball Game KINGS 02/02/13 11:00 AM Salem Middle School KINGS VS PRAIRIE DOGS Basketball Game PRAIRIE DOGS 02/02/13 11:00 AM Salem Middle School KINGS VS PRAIRIE DOGS Basketball Game TIGERS 02/02/13 12:00 PM Salem Middle School TIGERS VS JACKHAMMERS Basketball Game JACKHAMMERS 02/02/13 12:00 PM Salem Middle School TIGERS VS JACKHAMMERS Basketball Game THUNDERBOLTS 02/02/13 1:00 PM Salem Middle School THUNDERBOLTS VS BUZZSAWS Basketball Game BUZZSAWS 02/02/13 1:00 PM Salem Middle School THUNDERBOLTS VS BUZZSAWS Basketball Game BEARS 02/02/13 2:00 PM Salem Middle School BEARS VS ZIPS Basketball Game ZIPS 02/02/13 2:00 PM Salem Middle School BEARS VS ZIPS Basketball Game VOLCANOS 02/02/13 3:00 PM Salem Middle School VOLCANOS VS PYTHONS Basketball Game PYTHONS 02/02/13 3:00 PM Salem Middle School VOLCANOS VS PYTHONS Basketball Game BOBCATS 02/02/13 4:00 PM Salem Middle School BOBCATS VS BAZOOKAS Basketball Game BAZOOKAS 02/02/13 4:00 PM Salem Middle School BOBCATS VS BAZOOKAS Basketball Game BEARS 02/09/13 9:00 AM Salem Middle School BEARS VS TIGERS Basketball Game TIGERS 02/09/13 9:00 AM Salem Middle School BEARS VS TIGERS Basketball Game THUNDERBOLTS 02/09/13 10:00 AM Salem Middle School THUNDERBOLTS VS ZIPS Basketball Game ZIPS 02/09/13 10:00 AM Salem Middle School THUNDERBOLTS VS ZIPS Basketball Game BISONS 02/09/13 11:00 AM Salem Middle School BISONS VS PYTHONS Basketball Game PYTHONS 02/09/13 11:00 AM Salem Middle School BISONS VS PYTHONS Basketball Game YELLOW JACKETS 02/09/13 12:00 PM Salem Middle School YELLOW JACKETS VS BOBCATS Basketball Game BOBCATS 02/09/13 12:00 PM Salem Middle School YELLOW JACKETS VS BOBCATS Basketball Game KINGS 02/09/13 1:00 PM Salem Middle School KINGS VS MATADORS Basketball Game MATADORS 02/09/13 1:00 PM Salem Middle School KINGS VS MATADORS Basketball Game BAZOOKAS 02/09/13 2:00 PM Salem Middle School BAZOOKAS VS VOLCANOS Basketball Game VOLCANOS 02/09/13 2:00 PM Salem Middle School BAZOOKAS VS VOLCANOS Basketball Game JUGGERNAUTS 02/09/13 3:00 PM Salem Middle School JUGGERNAUTS VS PRAIRIE DOGS Basketball Game PRAIRIE DOGS 02/09/13 3:00 PM Salem Middle School JUGGERNAUTS VS PRAIRIE DOGS Basketball Game JACKHAMMERS 02/09/13 4:00 PM Salem Middle School JACKHAMMERS VS BUZZSAWS Basketball Game BUZZSAWS 02/09/13 4:00 PM Salem Middle School JACKHAMMERS VS BUZZSAWS Basketball Game MATADORS 02/16/13 9:00 AM Salem Middle School MATADORS VS BUZZSAWS Basketball Game BUZZSAWS 02/16/13 9:00 AM Salem Middle School MATADORS VS BUZZSAWS Basketball Game YELLOW JACKETS 02/16/13 10:00 AM Salem Middle School YELLOW JACKETS VS PYTHONS Basketball Game PYTHONS 02/16/13 10:00 AM Salem Middle School YELLOW JACKETS VS PYTHONS Basketball Game BOBCATS 02/16/13 11:00 AM Salem Middle School BOBCATS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 02/16/13 11:00 AM Salem Middle School BOBCATS VS JUGGERNAUTS Basketball Game ZIPS 02/16/13 12:00 PM Salem Middle School ZIPS VS JACKHAMMERS Basketball Game JACKHAMMERS 02/16/13 12:00 PM Salem Middle School ZIPS VS JACKHAMMERS Basketball Game BAZOOKAS 02/16/13 1:00 PM Salem Middle School BAZOOKAS VS BEARS Basketball Game BEARS 02/16/13 1:00 PM Salem Middle School BAZOOKAS VS BEARS Basketball Game PRAIRIE DOGS 02/16/13 2:00 PM Salem Middle School PRAIRIE DOGS VS THUNDERBOLTS Basketball Game THUNDERBOLTS 02/16/13 2:00 PM Salem Middle School PRAIRIE DOGS VS THUNDERBOLTS Basketball Game BISONS 02/16/13 3:00 PM Salem Middle School BISONS VS TIGERS Basketball Game TIGERS 02/16/13 3:00 PM Salem Middle School BISONS VS TIGERS Basketball Game VOLCANOS 02/16/13 4:00 PM Salem Middle School VOLCANOS VS KINGS Basketball Game KINGS 02/16/13 4:00 PM Salem Middle School VOLCANOS VS KINGS Basketball Game BOBCATS 02/23/13 9:00 AM Salem Middle School BOBCATS VS THUNDERBOLTS Basketball Game THUNDERBOLTS 02/23/13 9:00 AM Salem Middle School BOBCATS VS THUNDERBOLTS Basketball Game BAZOOKAS 02/23/13 10:00 AM Salem Middle School BAZOOKAS VS JUGGERNAUTS Basketball Game JUGGERNAUTS 02/23/13 10:00 AM Salem Middle School BAZOOKAS VS JUGGERNAUTS Basketball Game ZIPS 02/23/13 11:00 AM Salem Middle School ZIPS VS VOLCANOS Basketball Game VOLCANOS 02/23/13 11:00 AM Salem Middle School ZIPS VS VOLCANOS Basketball Game KINGS 02/23/13 12:00 PM Salem Middle School KINGS VS BISONS Basketball Game BISONS 02/23/13 12:00 PM Salem Middle School KINGS VS BISONS Basketball Game PRAIRIE DOGS 02/23/13 1:00 PM Salem Middle School PRAIRIE DOGS VS MATADORS Basketball Game MATADORS 02/23/13 1:00 PM Salem Middle School PRAIRIE DOGS VS MATADORS Basketball Game PYTHONS 02/23/13 2:00 PM Salem Middle School PYTHONS VS TIGERS Basketball Game TIGERS 02/23/13 2:00 PM Salem Middle School PYTHONS VS TIGERS Basketball Game BUZZSAWS 02/23/13 3:00 PM Salem Middle School BUZZSAWS VS BEARS Basketball Game BEARS 02/23/13 3:00 PM Salem Middle School BUZZSAWS VS BEARS Basketball Game YELLOW JACKETS 02/23/13 4:00 PM Salem Middle School YELLOW JACKETS VS JACKHAMMERS Basketball Game JACKHAMMERS 02/23/13 4:00 PM Salem Middle School YELLOW JACKETS VS JACKHAMMERS Basketball Practice ZIPS 11/27/12 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / BISONS / PRAIRIE DOGS Basketball Practice THUNDERBOLTS 11/27/12 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / BISONS / PRAIRIE DOGS Basketball Practice BISONS 11/27/12 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / BISONS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 11/27/12 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / BISONS / PRAIRIE DOGS Basketball Practice YELLOW JACKETS 11/27/12 8:00 PM Salem Middle School YELLOW JACKETS / VOLCANOS / JACKHAMMERS / BOBCATS Basketball Practice VOLCANOS 11/27/12 8:00 PM Salem Middle School YELLOW JACKETS / VOLCANOS / JACKHAMMERS / BOBCATS Basketball Practice JACKHAMMERS 11/27/12 8:00 PM Salem Middle School YELLOW JACKETS / VOLCANOS / JACKHAMMERS / BOBCATS Basketball Practice BOBCATS 11/27/12 8:00 PM Salem Middle School YELLOW JACKETS / VOLCANOS / JACKHAMMERS / BOBCATS Basketball Practice TIGERS 11/28/12 7:00 PM Salem Middle School TIGERS / MATADORS / BUZZSAWS / KINGS Basketball Practice MATADORS 11/28/12 7:00 PM Salem Middle School TIGERS / MATADORS / BUZZSAWS / KINGS Basketball Practice BUZZSAWS 11/28/12 7:00 PM Salem Middle School TIGERS / MATADORS / BUZZSAWS / KINGS Basketball Practice KINGS 11/28/12 7:00 PM Salem Middle School TIGERS / MATADORS / BUZZSAWS / KINGS Basketball Practice BEARS 11/29/12 8:00 PM Salem Middle School BEARS / JUGGERNAUTS / BAZOOKAS / PYTHONS Basketball Practice JUGGERNAUTS 11/29/12 8:00 PM Salem Middle School BEARS / JUGGERNAUTS / BAZOOKAS / PYTHONS Basketball Practice BAZOOKAS 11/29/12 8:00 PM Salem Middle School BEARS / JUGGERNAUTS / BAZOOKAS / PYTHONS Basketball Practice PYTHONS 11/29/12 8:00 PM Salem Middle School BEARS / JUGGERNAUTS / BAZOOKAS / PYTHONS Basketball Practice TIGERS 12/01/12 9:00 AM Salem Middle School TIGERS / PYTHONS Basketball Practice PYTHONS 12/01/12 9:00 AM Salem Middle School TIGERS / PYTHONS Basketball Practice THUNDERBOLTS 12/01/12 10:00 AM Salem Middle School THUNDERBOLTS / BUZZSAWS Basketball Practice BUZZSAWS 12/01/12 10:00 AM Salem Middle School THUNDERBOLTS / BUZZSAWS Basketball Practice JACKHAMMERS 12/01/12 11:00 AM Salem Middle School JACKHAMMERS / BEARS Basketball Practice BEARS 12/01/12 11:00 AM Salem Middle School JACKHAMMERS / BEARS Basketball Practice KINGS 12/01/12 12:00 PM Salem Middle School KINGS / YELLOW JACKETS Basketball Practice YELLOW JACKETS 12/01/12 12:00 PM Salem Middle School KINGS / YELLOW JACKETS Basketball Practice JUGGERNAUTS 12/01/12 1:00 PM Salem Middle School JUGGERNAUTS / BAZOOKAS Basketball Practice BAZOOKAS 12/01/12 1:00 PM Salem Middle School JUGGERNAUTS / BAZOOKAS Basketball Practice PRAIRIE DOGS 12/01/12 2:00 PM Salem Middle School PRAIRIE DOGS / MATADORS Basketball Practice MATADORS 12/01/12 2:00 PM Salem Middle School PRAIRIE DOGS / MATADORS Basketball Practice BOBCATS 12/01/12 3:00 PM Salem Middle School BOBCATS / BISONS Basketball Practice BISONS 12/01/12 3:00 PM Salem Middle School BOBCATS / BISONS Basketball Practice ZIPS 12/01/12 4:00 PM Salem Middle School ZIPS / VOLCANOS Basketball Practice VOLCANOS 12/01/12 4:00 PM Salem Middle School ZIPS / VOLCANOS Basketball Practice BEARS 12/03/12 7:00 PM Salem Middle School BEARS / BAZOOKAS / KINGS Basketball Practice BAZOOKAS 12/03/12 7:00 PM Salem Middle School BEARS / BAZOOKAS / KINGS Basketball Practice KINGS 12/03/12 7:00 PM Salem Middle School BEARS / BAZOOKAS / KINGS Basketball Practice BOBCATS 12/03/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS Basketball Practice VOLCANOS 12/03/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS Basketball Practice JUGGERNAUTS 12/03/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS Basketball Practice PRAIRIE DOGS 12/04/12 8:00 PM Salem Middle School PRAIRIE DOGS / ZIPS / JACKHAMMERS Basketball Practice ZIPS 12/04/12 8:00 PM Salem Middle School PRAIRIE DOGS / ZIPS / JACKHAMMERS Basketball Practice JACKHAMMERS 12/04/12 8:00 PM Salem Middle School PRAIRIE DOGS / ZIPS / JACKHAMMERS Basketball Practice YELLOW JACKETS 12/05/12 7:00 PM Salem Middle School YELLOW JACKETS / BUZZSAWS / MATADORS / PYTHONS Basketball Practice BUZZSAWS 12/05/12 7:00 PM Salem Middle School YELLOW JACKETS / BUZZSAWS / MATADORS / PYTHONS Basketball Practice MATADORS 12/05/12 7:00 PM Salem Middle School YELLOW JACKETS / BUZZSAWS / MATADORS / PYTHONS Basketball Practice PYTHONS 12/05/12 7:00 PM Salem Middle School YELLOW JACKETS / BUZZSAWS / MATADORS / PYTHONS Basketball Practice THUNDERBOLTS 12/06/12 8:00 PM Salem Middle School THUNDERBOLTS / BISONS / TIGERS Basketball Practice BISONS 12/06/12 8:00 PM Salem Middle School THUNDERBOLTS / BISONS / TIGERS Basketball Practice TIGERS 12/06/12 8:00 PM Salem Middle School THUNDERBOLTS / BISONS / TIGERS Basketball Practice BOBCATS 12/10/12 7:00 PM Salem Middle School BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice BEARS 12/10/12 7:00 PM Salem Middle School BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 12/10/12 7:00 PM Salem Middle School BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice THUNDERBOLTS 12/10/12 8:00 PM Salem Middle School THUNDERBOLTS / PYTHONS / BISONS Basketball Practice PYTHONS 12/10/12 8:00 PM Salem Middle School THUNDERBOLTS / PYTHONS / BISONS Basketball Practice BISONS 12/10/12 8:00 PM Salem Middle School THUNDERBOLTS / PYTHONS / BISONS Basketball Practice JUGGERNAUTS 12/11/12 8:00 PM Salem Middle School JUGGERNAUTS / BAZOOKAS / JACKHAMMERS Basketball Practice BAZOOKAS 12/11/12 8:00 PM Salem Middle School JUGGERNAUTS / BAZOOKAS / JACKHAMMERS Basketball Practice JACKHAMMERS 12/11/12 8:00 PM Salem Middle School JUGGERNAUTS / BAZOOKAS / JACKHAMMERS Basketball Practice TIGERS 12/12/12 7:00 PM Salem Middle School TIGERS / MATADORS / KINGS / BUZZSAWS Basketball Practice MATADORS 12/12/12 7:00 PM Salem Middle School TIGERS / MATADORS / KINGS / BUZZSAWS Basketball Practice KINGS 12/12/12 7:00 PM Salem Middle School TIGERS / MATADORS / KINGS / BUZZSAWS Basketball Practice BUZZSAWS 12/12/12 7:00 PM Salem Middle School TIGERS / MATADORS / KINGS / BUZZSAWS Basketball Practice ZIPS 12/13/12 8:00 PM Salem Middle School ZIPS / VOLCANOS / YELLOW JACKETS Basketball Practice VOLCANOS 12/13/12 8:00 PM Salem Middle School ZIPS / VOLCANOS / YELLOW JACKETS Basketball Practice YELLOW JACKETS 12/13/12 8:00 PM Salem Middle School ZIPS / VOLCANOS / YELLOW JACKETS Basketball Practice PRAIRIE DOGS 12/15/12 9:00 AM Salem Middle School PRAIRIE DOGS / BISONS Basketball Practice BISONS 12/15/12 9:00 AM Salem Middle School PRAIRIE DOGS / BISONS Basketball Practice BOBCATS 12/15/12 10:00 AM Salem Middle School BOBCATS / VOLCANOS Basketball Practice VOLCANOS 12/15/12 10:00 AM Salem Middle School BOBCATS / VOLCANOS Basketball Practice ZIPS 12/15/12 11:00 AM Salem Middle School ZIPS / PYTHONS Basketball Practice PYTHONS 12/15/12 11:00 AM Salem Middle School ZIPS / PYTHONS Basketball Practice JACKHAMMERS 12/15/12 12:00 PM Salem Middle School JACKHAMMERS / BEARS Basketball Practice BEARS 12/15/12 12:00 PM Salem Middle School JACKHAMMERS / BEARS Basketball Practice TIGERS 12/15/12 1:00 PM Salem Middle School TIGERS / BUZZSAWS Basketball Practice BUZZSAWS 12/15/12 1:00 PM Salem Middle School TIGERS / BUZZSAWS Basketball Practice THUNDERBOLTS 12/15/12 2:00 PM Salem Middle School THUNDERBOLTS / YELLOW JACKETS Basketball Practice YELLOW JACKETS 12/15/12 2:00 PM Salem Middle School THUNDERBOLTS / YELLOW JACKETS Basketball Practice KINGS 12/15/12 3:00 PM Salem Middle School KINGS / BAZOOKAS Basketball Practice BAZOOKAS 12/15/12 3:00 PM Salem Middle School KINGS / BAZOOKAS Basketball Practice JUGGERNAUTS 12/15/12 4:00 PM Salem Middle School JUGGERNAUTS / MATADORS Basketball Practice MATADORS 12/15/12 4:00 PM Salem Middle School JUGGERNAUTS / MATADORS Basketball Practice BEARS 12/31/12 7:00 PM Salem Middle School BEARS / PYTHONS / YELLOW JACKETS / ZIPS Basketball Practice PYTHONS 12/31/12 7:00 PM Salem Middle School BEARS / PYTHONS / YELLOW JACKETS / ZIPS Basketball Practice YELLOW JACKETS 12/31/12 7:00 PM Salem Middle School BEARS / PYTHONS / YELLOW JACKETS / ZIPS Basketball Practice ZIPS 12/31/12 7:00 PM Salem Middle School BEARS / PYTHONS / YELLOW JACKETS / ZIPS Basketball Practice BOBCATS 12/31/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS / BISONS Basketball Practice VOLCANOS 12/31/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS / BISONS Basketball Practice JUGGERNAUTS 12/31/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS / BISONS Basketball Practice BISONS 12/31/12 8:00 PM Salem Middle School BOBCATS / VOLCANOS / JUGGERNAUTS / BISONS Basketball Practice TIGERS 01/02/13 7:00 PM Salem Middle School TIGERS / BUZZSAWS / MATADORS / KINGS Basketball Practice BUZZSAWS 01/02/13 7:00 PM Salem Middle School TIGERS / BUZZSAWS / MATADORS / KINGS Basketball Practice MATADORS 01/02/13 7:00 PM Salem Middle School TIGERS / BUZZSAWS / MATADORS / KINGS Basketball Practice KINGS 01/02/13 7:00 PM Salem Middle School TIGERS / BUZZSAWS / MATADORS / KINGS Basketball Practice THUNDERBOLTS 01/03/13 8:00 PM Salem Middle School THUNDERBOLTS / PRAIRIE DOGS / BAZOOKAS / JACKHAMMERS Basketball Practice PRAIRIE DOGS 01/03/13 8:00 PM Salem Middle School THUNDERBOLTS / PRAIRIE DOGS / BAZOOKAS / JACKHAMMERS Basketball Practice BAZOOKAS 01/03/13 8:00 PM Salem Middle School THUNDERBOLTS / PRAIRIE DOGS / BAZOOKAS / JACKHAMMERS Basketball Practice JACKHAMMERS 01/03/13 8:00 PM Salem Middle School THUNDERBOLTS / PRAIRIE DOGS / BAZOOKAS / JACKHAMMERS Basketball Practice ZIPS 01/07/13 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / TIGERS Basketball Practice THUNDERBOLTS 01/07/13 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / TIGERS Basketball Practice TIGERS 01/07/13 7:00 PM Salem Middle School ZIPS / THUNDERBOLTS / TIGERS Basketball Practice BUZZSAWS 01/07/13 8:00 PM Salem Middle School BUZZSAWS / VOLCANOS / PYTHONS Basketball Practice VOLCANOS 01/07/13 8:00 PM Salem Middle School BUZZSAWS / VOLCANOS / PYTHONS Basketball Practice PYTHONS 01/07/13 8:00 PM Salem Middle School BUZZSAWS / VOLCANOS / PYTHONS Basketball Practice JACKHAMMERS 01/08/13 8:00 PM Salem Middle School JACKHAMMERS / JUGGERNAUTS / BEARS Basketball Practice JUGGERNAUTS 01/08/13 8:00 PM Salem Middle School JACKHAMMERS / JUGGERNAUTS / BEARS Basketball Practice BEARS 01/08/13 8:00 PM Salem Middle School JACKHAMMERS / JUGGERNAUTS / BEARS Basketball Practice BISONS 01/09/13 7:00 PM Salem Middle School BISONS / MATADORS / YELLOW JACKETS / KINGS Basketball Practice MATADORS 01/09/13 7:00 PM Salem Middle School BISONS / MATADORS / YELLOW JACKETS / KINGS Basketball Practice YELLOW JACKETS 01/09/13 7:00 PM Salem Middle School BISONS / MATADORS / YELLOW JACKETS / KINGS Basketball Practice KINGS 01/09/13 7:00 PM Salem Middle School BISONS / MATADORS / YELLOW JACKETS / KINGS Basketball Practice BOBCATS 01/10/13 8:00 PM Salem Middle School BOBCATS / PRAIRIE DOGS / BAZOOKAS Basketball Practice PRAIRIE DOGS 01/10/13 8:00 PM Salem Middle School BOBCATS / PRAIRIE DOGS / BAZOOKAS Basketball Practice BAZOOKAS 01/10/13 8:00 PM Salem Middle School BOBCATS / PRAIRIE DOGS / BAZOOKAS Basketball Practice BISONS 01/14/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice YELLOW JACKETS 01/14/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice JUGGERNAUTS 01/14/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice PYTHONS 01/14/13 8:00 PM Salem Middle School PYTHONS / KINGS / BAZOOKAS Basketball Practice KINGS 01/14/13 8:00 PM Salem Middle School PYTHONS / KINGS / BAZOOKAS Basketball Practice BAZOOKAS 01/14/13 8:00 PM Salem Middle School PYTHONS / KINGS / BAZOOKAS Basketball Practice THUNDERBOLTS 01/15/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / JACKHAMMERS Basketball Practice TIGERS 01/15/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / JACKHAMMERS Basketball Practice JACKHAMMERS 01/15/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / JACKHAMMERS Basketball Practice MATADORS 01/16/13 7:00 PM Salem Middle School MATADORS / BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice BOBCATS 01/16/13 7:00 PM Salem Middle School MATADORS / BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice BEARS 01/16/13 7:00 PM Salem Middle School MATADORS / BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 01/16/13 7:00 PM Salem Middle School MATADORS / BOBCATS / BEARS / PRAIRIE DOGS Basketball Practice BUZZSAWS 01/17/13 8:00 PM Salem Middle School BUZZSAWS / ZIPS / VOLCANOS Basketball Practice ZIPS 01/17/13 8:00 PM Salem Middle School BUZZSAWS / ZIPS / VOLCANOS Basketball Practice VOLCANOS 01/17/13 8:00 PM Salem Middle School BUZZSAWS / ZIPS / VOLCANOS Basketball Practice JACKHAMMERS 01/22/13 7:00 PM Salem Middle School JACKHAMMERS / YELLOW JACK / PRAIRIE DOGS / PYTHONS Basketball Practice YELLOW JACK 01/22/13 7:00 PM Salem Middle School JACKHAMMERS / YELLOW JACK / PRAIRIE DOGS / PYTHONS Basketball Practice PRAIRIE DOGS 01/22/13 7:00 PM Salem Middle School JACKHAMMERS / YELLOW JACK / PRAIRIE DOGS / PYTHONS Basketball Practice PYTHONS 01/22/13 7:00 PM Salem Middle School JACKHAMMERS / YELLOW JACK / PRAIRIE DOGS / PYTHONS Basketball Practice THUNDERBOLTS 01/22/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / ZIPS / BAZOOKAS Basketball Practice TIGERS 01/22/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / ZIPS / BAZOOKAS Basketball Practice ZIPS 01/22/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / ZIPS / BAZOOKAS Basketball Practice BAZOOKAS 01/22/13 8:00 PM Salem Middle School THUNDERBOLTS / TIGERS / ZIPS / BAZOOKAS Basketball Practice BUZZSAWS 01/23/13 7:00 PM Salem Middle School BUZZSAWS / MATADORS / KINGS / JUGGERNAUTS Basketball Practice MATADORS 01/23/13 7:00 PM Salem Middle School BUZZSAWS / MATADORS / KINGS / JUGGERNAUTS Basketball Practice KINGS 01/23/13 7:00 PM Salem Middle School BUZZSAWS / MATADORS / KINGS / JUGGERNAUTS Basketball Practice JUGGERNAUTS 01/23/13 7:00 PM Salem Middle School BUZZSAWS / MATADORS / KINGS / JUGGERNAUTS Basketball Practice VOLCANOS 01/24/13 8:00 PM Salem Middle School VOLCANOS / BISONS / BOBCATS / BEARS Basketball Practice BISONS 01/24/13 8:00 PM Salem Middle School VOLCANOS / BISONS / BOBCATS / BEARS Basketball Practice BOBCATS 01/24/13 8:00 PM Salem Middle School VOLCANOS / BISONS / BOBCATS / BEARS Basketball Practice BEARS 01/24/13 8:00 PM Salem Middle School VOLCANOS / BISONS / BOBCATS / BEARS Basketball Practice KINGS 01/28/13 7:00 PM Salem Middle School KINGS / JUGGERNAUTS / BOBCATS Basketball Practice JUGGERNAUTS 01/28/13 7:00 PM Salem Middle School KINGS / JUGGERNAUTS / BOBCATS Basketball Practice BOBCATS 01/28/13 7:00 PM Salem Middle School KINGS / JUGGERNAUTS / BOBCATS Basketball Practice ZIPS 01/28/13 8:00 PM Salem Middle School ZIPS / BEARS / PRAIRIE DOGS Basketball Practice BEARS 01/28/13 8:00 PM Salem Middle School ZIPS / BEARS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 01/28/13 8:00 PM Salem Middle School ZIPS / BEARS / PRAIRIE DOGS Basketball Practice THUNDERBOLTS 01/29/13 8:00 PM Salem Middle School THUNDERBOLTS / JACKHAMMERS / BAZOOKAS Basketball Practice JACKHAMMERS 01/29/13 8:00 PM Salem Middle School THUNDERBOLTS / JACKHAMMERS / BAZOOKAS Basketball Practice BAZOOKAS 01/29/13 8:00 PM Salem Middle School THUNDERBOLTS / JACKHAMMERS / BAZOOKAS Basketball Practice MATADORS 01/30/13 7:00 PM Salem Middle School MATADORS / YELLOW JAC / BUZZSAWS / BISONS Basketball Practice YELLOW JAC 01/30/13 7:00 PM Salem Middle School MATADORS / YELLOW JAC / BUZZSAWS / BISONS Basketball Practice BUZZSAWS 01/30/13 7:00 PM Salem Middle School MATADORS / YELLOW JAC / BUZZSAWS / BISONS Basketball Practice BISONS 01/30/13 7:00 PM Salem Middle School MATADORS / YELLOW JAC / BUZZSAWS / BISONS Basketball Practice TIGERS 01/31/13 8:00 PM Salem Middle School TIGERS / VOLCANOS / PYTHONS Basketball Practice VOLCANOS 01/31/13 8:00 PM Salem Middle School TIGERS / VOLCANOS / PYTHONS Basketball Practice PYTHONS 01/31/13 8:00 PM Salem Middle School TIGERS / VOLCANOS / PYTHONS Basketball Practice VOLCANOS 02/04/13 7:00 PM Salem Middle School VOLCANOS / BUZZSAWS / PRAIRIE DOGS Basketball Practice BUZZSAWS 02/04/13 7:00 PM Salem Middle School VOLCANOS / BUZZSAWS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 02/04/13 7:00 PM Salem Middle School VOLCANOS / BUZZSAWS / PRAIRIE DOGS Basketball Practice TIGERS 02/04/13 8:00 PM Salem Middle School TIGERS / THUNDERBOLTS / BISONS Basketball Practice THUNDERBOLTS 02/04/13 8:00 PM Salem Middle School TIGERS / THUNDERBOLTS / BISONS Basketball Practice BISONS 02/04/13 8:00 PM Salem Middle School TIGERS / THUNDERBOLTS / BISONS Basketball Practice JACKHAMMERS 02/05/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / BAZOOKAS Basketball Practice BOBCATS 02/05/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / BAZOOKAS Basketball Practice BAZOOKAS 02/05/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / BAZOOKAS Basketball Practice BEARS 02/06/13 7:00 PM Salem Middle School BEARS / PYTHONS / MATADORS / KINGS Basketball Practice PYTHONS 02/06/13 7:00 PM Salem Middle School BEARS / PYTHONS / MATADORS / KINGS Basketball Practice MATADORS 02/06/13 7:00 PM Salem Middle School BEARS / PYTHONS / MATADORS / KINGS Basketball Practice KINGS 02/06/13 7:00 PM Salem Middle School BEARS / PYTHONS / MATADORS / KINGS Basketball Practice ZIPS 02/07/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice YELLOW JACKETS 02/07/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice JUGGERNAUTS 02/07/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / JUGGERNAUTS Basketball Practice BISONS 02/11/13 7:00 PM Salem Middle School BISONS / VOLCANOS / THUNDERBOLTS Basketball Practice VOLCANOS 02/11/13 7:00 PM Salem Middle School BISONS / VOLCANOS / THUNDERBOLTS Basketball Practice THUNDERBOLTS 02/11/13 7:00 PM Salem Middle School BISONS / VOLCANOS / THUNDERBOLTS Basketball Practice ZIPS 02/11/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / BOBCATS Basketball Practice YELLOW JACKETS 02/11/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / BOBCATS Basketball Practice BOBCATS 02/11/13 8:00 PM Salem Middle School ZIPS / YELLOW JACKETS / BOBCATS Basketball Practice JACKHAMMERS 02/12/13 8:00 PM Salem Middle School JACKHAMMERS / TIGERS / BEARS Basketball Practice TIGERS 02/12/13 8:00 PM Salem Middle School JACKHAMMERS / TIGERS / BEARS Basketball Practice BEARS 02/12/13 8:00 PM Salem Middle School JACKHAMMERS / TIGERS / BEARS Basketball Practice JUGGERNAUTS 02/13/13 7:00 PM Salem Middle School JUGGERNAUTS / MATADORS / KINGS / PYTHONS Basketball Practice MATADORS 02/13/13 7:00 PM Salem Middle School JUGGERNAUTS / MATADORS / KINGS / PYTHONS Basketball Practice KINGS 02/13/13 7:00 PM Salem Middle School JUGGERNAUTS / MATADORS / KINGS / PYTHONS Basketball Practice PYTHONS 02/13/13 7:00 PM Salem Middle School JUGGERNAUTS / MATADORS / KINGS / PYTHONS Basketball Practice BUZZSAWS 02/14/13 8:00 PM Salem Middle School BUZZSAWS / BAZOOKAS / PRAIRIE DOGS Basketball Practice BAZOOKAS 02/14/13 8:00 PM Salem Middle School BUZZSAWS / BAZOOKAS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 02/14/13 8:00 PM Salem Middle School BUZZSAWS / BAZOOKAS / PRAIRIE DOGS Basketball Practice BISONS 02/18/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / ZIPS Basketball Practice YELLOW JACKETS 02/18/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / ZIPS Basketball Practice ZIPS 02/18/13 7:00 PM Salem Middle School BISONS / YELLOW JACKETS / ZIPS Basketball Practice PYTHONS 02/18/13 8:00 PM Salem Middle School PYTHONS / KINGS / BUZZSAWS Basketball Practice KINGS 02/18/13 8:00 PM Salem Middle School PYTHONS / KINGS / BUZZSAWS Basketball Practice BUZZSAWS 02/18/13 8:00 PM Salem Middle School PYTHONS / KINGS / BUZZSAWS Basketball Practice JACKHAMMERS 02/19/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / PRAIRIE DOGS Basketball Practice BOBCATS 02/19/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / PRAIRIE DOGS Basketball Practice PRAIRIE DOGS 02/19/13 8:00 PM Salem Middle School JACKHAMMERS / BOBCATS / PRAIRIE DOGS Basketball Practice TIGERS 02/20/13 7:00 PM Salem Middle School TIGERS / BEARS / MATADORS / THUNDERBOLTS Basketball Practice BEARS 02/20/13 7:00 PM Salem Middle School TIGERS / BEARS / MATADORS / THUNDERBOLTS Basketball Practice MATADORS 02/20/13 7:00 PM Salem Middle School TIGERS / BEARS / MATADORS / THUNDERBOLTS Basketball Practice THUNDERBOLTS 02/20/13 7:00 PM Salem Middle School TIGERS / BEARS / MATADORS / THUNDERBOLTS Basketball Practice VOLCANOS 02/21/13 8:00 PM Salem Middle School VOLCANOS / JUGGERNAUTS / BAZOOKAS Basketball Practice JUGGERNAUTS 02/21/13 8:00 PM Salem Middle School VOLCANOS / JUGGERNAUTS / BAZOOKAS Basketball Practice BAZOOKAS 02/21/13 8:00 PM Salem Middle School VOLCANOS / JUGGERNAUTS / BAZOOKAS Basketball Practice THUNDERBOLTS 02/25/13 7:00 PM Salem Middle School THUNDERBOLTS / JUGGERNAUTS / TIGERS Basketball Practice JUGGERNAUTS 02/25/13 7:00 PM Salem Middle School THUNDERBOLTS / JUGGERNAUTS / TIGERS Basketball Practice TIGERS 02/25/13 7:00 PM Salem Middle School THUNDERBOLTS / JUGGERNAUTS / TIGERS Basketball Practice VOLCANOS 02/25/13 8:00 PM Salem Middle School VOLCANOS / BAZOOKAS / BEARS Basketball Practice BAZOOKAS 02/25/13 8:00 PM Salem Middle School VOLCANOS / BAZOOKAS / BEARS Basketball Practice BEARS 02/25/13 8:00 PM Salem Middle School VOLCANOS / BAZOOKAS / BEARS Basketball Practice JACKHAMMERS 02/26/13 8:00 PM Salem Middle School JACKHAMMERS / PYTHONS / BOBCATS Basketball Practice PYTHONS 02/26/13 8:00 PM Salem Middle School JACKHAMMERS / PYTHONS / BOBCATS Basketball Practice BOBCATS 02/26/13 8:00 PM Salem Middle School JACKHAMMERS / PYTHONS / BOBCATS Basketball Practice MATADORS 02/27/13 7:00 PM Salem Middle School MATADORS / BUZZSAWS / PRAIRIE DOGS / KINGS Basketball Practice BUZZSAWS 02/27/13 7:00 PM Salem Middle School MATADORS / BUZZSAWS / PRAIRIE DOGS / KINGS Basketball Practice PRAIRIE DOGS 02/27/13 7:00 PM Salem Middle School MATADORS / BUZZSAWS / PRAIRIE DOGS / KINGS Basketball Practice KINGS 02/27/13 7:00 PM Salem Middle School MATADORS / BUZZSAWS / PRAIRIE DOGS / KINGS Basketball Practice ZIPS 02/28/13 8:00 PM Salem Middle School ZIPS / BISONS / YELLOW JACKETS Basketball Practice BISONS 02/28/13 8:00 PM Salem Middle School ZIPS / BISONS / YELLOW JACKETS Basketball Practice YELLOW JACKETS 02/28/13 8:00 PM Salem Middle School ZIPS / BISONS / YELLOW JACKETS ","permalink":"https://www.tewari.info/apex-basketball-schedule/","summary":"\u003ch2 id=\"practice-and-game-schedule-calender\"\u003ePractice and Game Schedule Calender\u003c/h2\u003e\n\u003cp\u003eClick \u003ca href=\"https://www.google.com/calendar/embed?src=u7hv40s0srdk43vr860hntp00g%40group.calendar.google.com\u0026amp;ctz=America/New_York\"\u003ehere\u003c/a\u003e to view the calender online.\nClick \u003ca href=\"https://www.google.com/calendar/ical/u7hv40s0srdk43vr860hntp00g%40group.calendar.google.com/public/basic.ics\"\u003ehere\u003c/a\u003e download the calender file that can be imported into Microsoft Outlook or most other desktop calender applications.\nRight-click \u003ca href=\"https://www.google.com/calendar/ical/u7hv40s0srdk43vr860hntp00g%40group.calendar.google.com/public/basic.ics\"\u003ehere\u003c/a\u003e and copy the link address. You can use this address to add the shared calender to your google account. Once you have done that, the calender can be synced on your iPhone, iPad, Android and Windows Phone. Google Sync instructions are here : \u003ca href=\"http://www.google.com/sync/index.html\"\u003ehttp://www.google.com/sync/index.html\u003c/a\u003e.\u003c/p\u003e","title":"Apex Basketball Schedule"},{"content":"These are some resources to help grasp System.Transactions functionality and use it effectively in your projects:\nFeatures Provided by System.Transactions to create transactional applications\nImplementing an Implicit Transaction using Transaction Scope\nMSDN Magazine Articles by John Papa:\nADO.NET and System.Transactions Revisiting System.Transactions These are specific to TransactionScope(the way to go in most cases):\nHere is a practical example of Using TransactionScope to handle transactions in .net. This article in MSDN Magazine gets in depth with the way a TransactionScope like functionality can be implemented. Gives you a good understanding of what is happening under the hood when using TransactionScope in some Repository implementations in multi-threaded scenarios. This CodeProject article is another example of implementing a transactional repository. There are excellent tips here about configuring TransactionScope when using it with SQL Server. This is a good resource for understanding CommitableTransaction usage.\nAnd this one on the CodeProject has brilliant, in-depth and under-the-hood coverage - Truly Understanding .NET Transactions and WCF Implementation.\nFeatures Provided by System.Transactions\nhttp://msdn.microsoft.com/en-us/library/vstudio/ee818755(v=vs.100).aspx\nImplementing an Implicit Transaction using Transaction Scope\nhttp://msdn.microsoft.com/en-us/library/vstudio/ee818746(v=vs.100).aspx\nMSDN Articles by John Papa\nADO.NET and System.Transactions\nhttp://msdn.microsoft.com/en-us/magazine/cc163847.aspx\nRevisiting System.Transactions\nhttp://msdn.microsoft.com/en-us/magazine/cc163527.aspx\nThese are specific to TransactionScope (the way to go in most cases)\nHere is a practical example of Using TransactionScope :\nhttp://thewayofcode.wordpress.com/2011/12/11/handling-transactions-in-net-using-transactionscope/\nThis one gets in depth with the way a TransactionScope like functionality can be implemented. Gives you a good understanding of what is happening under the hood when using TransactionScope in some Repository implementations in multi-threaded scenarios.\nhttp://msdn.microsoft.com/en-us/magazine/cc300805.aspx\nHere is another example of implementing a transactional repository :\nhttp://www.codeproject.com/Articles/31270/A-Transactional-Repository-Implementation-in-NET\nThere are excellent tips here about configuring TransactionScope when used with SQL Server:\nhttp://blogs.msdn.com/b/dbrowne/archive/2010/06/03/using-new-transactionscope-considered-harmful.aspx\nThis is a good resource for CommitableTransaction usage - http://www.codeproject.com/Articles/55472/Committable-Transactions-in-C-SQL\nAnd this one has brilliant under-the-hood coverage - http://www.codeproject.com/Articles/35087/Truly-Understanding-NET-Transactions-and-WCF-Impl\n","permalink":"https://www.tewari.info/2012/10/17/understanding-and-using-system-transactions/","summary":"\u003cp\u003eThese are some resources to help grasp \u003ca href=\"http://msdn.microsoft.com/en-us/library/vstudio/system.transactions(v=vs.90).aspx\" title=\"System.Transactions Namespace\"\u003eSystem.Transactions\u003c/a\u003e functionality and use it effectively in your projects:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"http://msdn.microsoft.com/en-us/library/vstudio/ee818755(v=vs.100).aspx\"\u003eFeatures Provided by System.Transactions\u003c/a\u003e to \u003ca href=\"http://msdn.microsoft.com/en-us/library/vstudio/ee818751(v=vs.100).aspx\"\u003ecreate transactional applications\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"http://msdn.microsoft.com/en-us/library/vstudio/ee818746(v=vs.100).aspx\"\u003eImplementing an Implicit Transaction using Transaction Scope\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMSDN Magazine Articles by \u003ca href=\"http://www.johnpapa.net/\"\u003eJohn Papa\u003c/a\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://msdn.microsoft.com/en-us/magazine/cc163847.aspx\"\u003eADO.NET and System.Transactions\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://msdn.microsoft.com/en-us/magazine/cc163527.aspx\"\u003eRevisiting System.Transactions\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThese are specific to \u003ca href=\"http://msdn.microsoft.com/en-us/library/vstudio/system.transactions.transactionscope(v=vs.100).aspx\"\u003eTransactionScope\u003c/a\u003e(the way to go in most cases):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHere is a practical example of \u003ca href=\"http://thewayofcode.wordpress.com/2011/12/11/handling-transactions-in-net-using-transactionscope/\"\u003eUsing TransactionScope to handle transactions in .net\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThis \u003ca href=\"http://msdn.microsoft.com/en-us/magazine/cc300805.aspx\"\u003earticle in MSDN Magazine\u003c/a\u003e gets in depth with the way a TransactionScope like functionality can be implemented. Gives you a good understanding of what is happening under the hood when using TransactionScope in some Repository implementations in multi-threaded scenarios.\u003c/li\u003e\n\u003cli\u003eThis CodeProject article is another example of \u003ca href=\"http://www.codeproject.com/Articles/31270/A-Transactional-Repository-Implementation-in-NET\"\u003eimplementing a transactional repository\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThere are \u003ca href=\"http://blogs.msdn.com/b/dbrowne/archive/2010/06/03/using-new-transactionscope-considered-harmful.aspx\"\u003eexcellent tips here\u003c/a\u003e about configuring TransactionScope when using it with SQL Server.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThis is a good resource for \u003ca href=\"http://www.codeproject.com/Articles/55472/Committable-Transactions-in-C-SQL\"\u003eunderstanding CommitableTransaction\u003c/a\u003e usage.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAnd this one on the CodeProject has brilliant, in-depth and under-the-hood coverage - \u003ca href=\"http://www.codeproject.com/Articles/35087/Truly-Understanding-NET-Transactions-and-WCF-Imple\"\u003eTruly Understanding .NET Transactions and WCF Implementation\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e","title":"Understanding and Using System.Transactions"},{"content":"I am working on a Windows 8 app (details to follow in a subsequent post) and the code is published in a public repo on github. My app uses third-party APIs and after I committed the first cut to github, I realized that I had included my api keys in the code. The whole world had access to my keys. I did not want to publish the developer keys for those APIs to the entire world.\nWhen the app will be released and distributed, those keys will need to be included in the app somehow. Once the keys are out there they can not be 100% protected from a determined mind. So, why bother? Why would I want to hide the api keys in the source code? Here are some good reasons -\n1. It might be illegal to put the keys out there in plain sight for the whole world to see. 2. Developer keys may be throttled or have other restrictions on how many times they can be used per day or per minute. 3. The keys might allow access to expensive cloud computing resources. 4. The keys might allow access to confidential/sensitive customer data.\nFirst, I had to take my keys back from git repo. Can you really remove information from a public git repository? Yes, you can, using git filter-branch. Here is how - https://help.github.com/articles/remove-sensitive-data. It worked! I successfully rewrote the history! My past commits don\u0026rsquo;t have those file(s) anymore that had my private api keys.\nNext, I made sure that I don\u0026rsquo;t make this mistake again -\n1. I added a new file ApiKeys.cs to the project. 2. Exposed the api keys as constants from a static class in this new file. 3 Added ApiKeys.cs in .gitignore file, to prevent this file from being committed to the repository. 4. Added instructions in ReadMe.txt for external developers to include their own keys.\nThis is not an ideal solution. If you are using a continuous build server, this technique will obviously not work. The code will not compile as-is, a file must be added to the project before it will start compiling. This works for me for now, but I am still looking for a better solution.\n","permalink":"https://www.tewari.info/2012/09/02/protecting-your-api-keys/","summary":"\u003cp\u003eI am working on a Windows 8 app (details to follow in a subsequent post) and the code is published in a public repo on \u003ca href=\"http://www.github.com/\"\u003egithub\u003c/a\u003e. My app uses third-party APIs and after I committed the first cut to github, I realized that I had included my api keys in the code. The whole world had access to my keys. I did not want to publish the developer keys for those APIs to the entire world.\u003c/p\u003e","title":"Protecting Your Api Keys"},{"content":"I am a big fan of keyboard shortcuts. Here are some of my favorites keyboard shortcuts in Excel.\n","permalink":"https://www.tewari.info/2012/08/24/favorite-excel-keyboard-shortcuts/","summary":"\u003cp\u003eI am a big fan of keyboard shortcuts. Here are some of my favorites keyboard shortcuts in Excel.\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/images/F2toeditselectedcell.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/Ctrl5tostrikethrough.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/shiftspacetoselectrow.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/ctrlspacetoselectcolumn.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/ctrlminustodeleteselectedrowcolumn.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/dragcopy-b4.png\"\u003e\u003cimg loading=\"lazy\" src=\"/images/dragcopyafter.png\"\u003e\u003c/p\u003e","title":"Favorite Excel Keyboard Shortcuts"},{"content":"","permalink":"https://www.tewari.info/apex-soccer-schedule/","summary":"","title":"Apex Soccer Schedule"},{"content":"Here is a brute force solution to the fetch problem -\nBasically, at each step there are three possibilities :\n1. You can fill a bucket.\n2. You can transfer water from one bucket to the other one.\n3. You can dump out the water from a bucket.\nIn this brute force solution, I try each one of these steps and then try all three again after each one of the previous steps. And on\nand on untill I get the required amount of water in one of the buckets.\nCheck it out. Source code is on my github repo -\nhttps://github.com/ashtewari/fetch\nHere is a brute force solution to the fetch puzzle.\nThe puzzle goes like this – You have two buckets. A 3 gallon bucket and a 5 gallon bucket. Buckets are not marked or graduated. You are to fetch 4 gallons of water in a single trip to the river. How will you do it?\nBasically, at each step there are three possibilities :\nYou can fill a bucket. You can transfer water from one bucket to the other one. You can dump out the water from a bucket. In this brute force solution, I try each one of these steps and then try all three again after each one of the previous steps. And on and on until I get the required amount of water in one of the buckets.\nCheck it out. Source code is on my github repo - https://github.com/ashtewari/fetch\n","permalink":"https://www.tewari.info/2012/01/03/solution-to-the-fetch-puzzle/","summary":"\u003cp\u003eHere is a brute force solution to the fetch problem -\u003c/p\u003e\n\u003cp\u003eBasically, at each step there are three possibilities :\u003c/p\u003e\n\u003cp\u003e1. You can fill a bucket.\u003c/p\u003e\n\u003cp\u003e2. You can transfer water from one bucket to the other one.\u003c/p\u003e\n\u003cp\u003e3. You can dump out the water from a bucket.\u003c/p\u003e\n\u003cp\u003eIn this brute force solution, I try each one of these steps and then try all three again after each one of the previous steps. And on\u003c/p\u003e","title":"Solution to the fetch puzzle"},{"content":"Here is a quite common programming interview puzzle - You have two buckets. A 3 gallon bucket and a 5 gallon bucket. Buckets are not marked or graduated. You are to fetch 4 gallon of water in a single trip to the river. How will you do it?\nObviousy, this question is asked by changing the capacities of the two buckets and the amount of water to be fetched.\nYour mission, should you choose to accept it, is to write a program to solve this puzzle in a generic way. Your program should take 3 inputs - capacities of the two buckets and the amount of water to be fetched. After solving the puzzle, your program must write out the solution step-by-step. You can use any programming language, any platform, any programming technique to write the program. Use whatever you like - C#, VB, C, C++, Java, Ruby, Python, F#, Boo, Javascript or any other language of your choice. Use design patterns, TDD, BDD, MVVM, Linq or whatever. Make it blazing fast, exploit multiple cores, use artificial intelligence. Go nuts! If you want to write the whole program in T-sql, powershell script or a batch script, go ahead. Heck ! you can even do it with regular expressions, if that your thing!\nYour mission, should you choose to accept it, is to write a program to solve this common programming interview puzzle in a generic way.\nThe puzzle goes like this - You have two buckets. A 3 gallon bucket and a 5 gallon bucket. Buckets are not marked or graduated. You are to fetch 4 gallons of water in a single trip to the river. How will you do it?\nPhoto Credit : http://www.flickr.com/photos/71256895@N00/3688461774/sizes/l/in/photostream/\nYour program should take 3 inputs - capacities of the two buckets and the amount of water to be fetched. After solving the puzzle, your program must write out the solution step-by-step. You can use any language, any platform and any technique to write the program. Use whatever you like - C#, VB, C, C++, Java, Ruby, Python, F#, Boo, Javascript, powershell script or any other language of your choice. Use design patterns, TDD, BDD, MVVM, Linq or whatever. Make it blazing fast, exploit multiple cores, use artificial intelligence. Go nuts! If you want to write the whole program in T-sql, go ahead. Heck ! you can even do it with regular expressions, if that your thing!\n","permalink":"https://www.tewari.info/2011/12/26/solve-puzzle-with-code/","summary":"\u003cp\u003eHere is a quite common programming interview puzzle - You have two buckets. A 3 gallon bucket and a 5 gallon bucket. Buckets are not marked or graduated. You are to fetch 4 gallon of water in a single trip to the river. How will you do it?\u003c/p\u003e\n\u003cp\u003eObviousy, this question is asked by changing the capacities of the two buckets and the amount of water to be fetched.\u003c/p\u003e\n\u003cp\u003eYour mission, should you choose to accept it, is to write a program to solve this puzzle in a generic way. Your program should take 3 inputs - capacities of the two buckets and the amount of water to be fetched. After solving the puzzle, your program must write out the solution step-by-step. You can use any programming language, any platform, any programming technique to write the program. Use whatever you like - C#, VB, C, C++, Java, Ruby, Python, F#, Boo, Javascript or any other language of your choice. Use design patterns, TDD, BDD, MVVM, Linq or whatever. Make it blazing fast, exploit multiple cores, use artificial intelligence. Go nuts! If you want to write the whole program in T-sql, powershell script or a batch script, go ahead. Heck ! you can even do it with regular expressions, if that your thing!\u003c/p\u003e","title":"Solve puzzle with code"},{"content":"Windigo is a windows phone app to access your diigo account on windows phone 7.\nCreate, edit and search diigo bookmarks. Slick, to-the-point interface. Browse and search public bookmarks of other diigo users. Tap on the bookmark for details, including tags. Tap on any tag to narrow your search. Trial version is available.\nWindigo 1.1 is out on the windows phone marketplace now. Highlights of this update :\n- Last SearchScope used is now persistent\n- Fixed search when a search term is picked from suggested words\n- Problem report now includes system info\n- Handle crash on navigating from main page\n- Fixed feature tracking for analytics\nLast SearchScope used is now persistent Fixed search when a search term is picked from suggested words Problem report now includes system info Handle crash on navigating from main page Fixed feature tracking for analytics ","permalink":"https://www.tewari.info/2011/12/05/windigo-1-1-released/","summary":"\u003cp\u003e\u003ca href=\"http://www.windowsphone.com/en-US/apps/fa40440c-a974-4329-b650-cf46d7c6eae4\"\u003e\u003cimg alt=\"windigo-samsung\" loading=\"lazy\" src=\"/wp-content/windigo_10-3-2011_0.52.40.563.png\"\u003e\u003c/a\u003e\u003ca href=\"http://www.windowsphone.com/en-US/apps/fa40440c-a974-4329-b650-cf46d7c6eae4\" title=\"windigo-marketplace\"\u003eWindigo\u003c/a\u003e is a windows phone app to access your \u003ca href=\"http://www.diigo.com\" title=\"diigo-website-url\"\u003ediigo\u003c/a\u003e account on windows phone 7.\u003c/p\u003e\n\u003cp\u003eCreate, edit and search diigo bookmarks. Slick, to-the-point interface. Browse and search public bookmarks of other diigo users. Tap on the bookmark for details, including tags. Tap on any tag to narrow your search. Trial version is available.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.windowsphone.com/en-US/apps/fa40440c-a974-4329-b650-cf46d7c6eae4\" title=\"windigo-download-link\"\u003eWindigo 1.1\u003c/a\u003e is out on the windows phone marketplace now.  Highlights of this update :\u003c/p\u003e\n\u003cp\u003e- Last SearchScope used is now persistent\u003c/p\u003e","title":"Windigo 1.1 Released"},{"content":"Windigo is a windows phone app. It lets you access your Diigo bookmarks on the go from your windows phone. You can browse, edit and create new bookmarks. Search your and other\u0026rsquo;s (public) bookmarks. Drill-down using tags. Share your bookmarks with your friends.\nI have completed developing this app and I would like to get it in the hands of a few more people to get some additional feedback before I submit it in windows phone marketplace. If you have a windows phone and a windows live id, you can help with this. Your phone does not need to be a developer (unlocked) phone.\nIf you are interested, contact me.\nHere is what I will do for you : I will acknowledge your role in preparing Windigo for release. Your name and a link to your website will appear in the credits page for Windigo. I will return the favor.\n","permalink":"https://www.tewari.info/2011/10/08/call-for-windigo-beta-testers/","summary":"\u003cp\u003eWindigo is a windows phone app. It lets you access your \u003ca href=\"http://www.diigo.com/\"\u003eDiigo\u003c/a\u003e bookmarks on the go from your windows phone. You can browse, edit and create new bookmarks. Search your and other\u0026rsquo;s (public) bookmarks. Drill-down using tags. Share your bookmarks with your friends.\u003c/p\u003e\n\u003cp\u003eI have completed developing this app and I would like to get it in the hands of a few more people to get some additional feedback before I submit it in windows phone marketplace. If you have a windows phone and a windows live id, you can help with this. Your phone does not need to be a developer (unlocked) phone.\u003c/p\u003e","title":"Call For Windigo Beta Testers"},{"content":"[silverlight: /demos/PositionedChildWindow.xap, 500, 300]\n","permalink":"https://www.tewari.info/childwindow-positioning-demo/","summary":"\u003cp\u003e[silverlight: /demos/PositionedChildWindow.xap, 500, 300]\u003c/p\u003e","title":"ChildWindow Positioning Demo"},{"content":"[silverlight: /demos/NoListBoxHighlighting.xap, 500, 300]\n","permalink":"https://www.tewari.info/remove-listboxitem-highlighting-demo/","summary":"\u003cp\u003e[silverlight: /demos/NoListBoxHighlighting.xap, 500, 300]\u003c/p\u003e","title":"Remove ListBoxItem Highlighting Demo"},{"content":"Silverlight ChildWindow is centered over the parent control. I have extended ChildWindow to open it at a specific position.\nPositioned ChildWindow\nHere is a live demo : childwindow-positioning-demo\nAnd here is the code :\npublic partial class ChildWindowEx : ChildWindow { Point _pt = new Point(0,0); public ChildWindowEx() { InitializeComponent(); } public ChildWindowEx(Point pt) : this() { _pt = pt; } protected override Size ArrangeOverride(Size finalSize) { Grid grid = Utils.FindChild(this, \u0026#34;ContentRoot\u0026#34;); if (grid != null) { grid.Arrange(new Rect(_pt.X, _pt.Y, grid.DesiredSize.Width, grid.DesiredSize.Height)); return finalSize; } return base.ArrangeOverride(finalSize); } } Visual Studio 2010 Solution : download\n","permalink":"https://www.tewari.info/2011/06/07/childwindow-positioning/","summary":"\u003cp\u003eSilverlight \u003ca href=\"http://msdn.microsoft.com/en-us/library/system.windows.controls.childwindow(v=vs.95).aspx\" title=\"MSDN_Silverlight_ChildWindow\"\u003eChildWindow\u003c/a\u003e is centered over the parent control. I have extended ChildWindow to open it at a specific position.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/images/PositionedChildWindow-screenshot.png\"\n         alt=\"Positioned ChildWindow\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003ePositioned ChildWindow\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eHere is a live demo : \u003ca href=\"/childwindow-positioning-demo/\"\u003echildwindow-positioning-demo\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAnd here is the code :\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epublic partial class ChildWindowEx : ChildWindow\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Point _pt = new Point(0,0);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    public ChildWindowEx()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        InitializeComponent();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    public ChildWindowEx(Point pt) : this()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        _pt = pt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    protected override Size ArrangeOverride(Size finalSize)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        Grid grid = Utils.FindChild(this, \u0026#34;ContentRoot\u0026#34;);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        if (grid != null)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            grid.Arrange(new Rect(_pt.X, _pt.Y, grid.DesiredSize.Width, grid.DesiredSize.Height));\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            return finalSize;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        return base.ArrangeOverride(finalSize);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eVisual Studio 2010 Solution : \u003ca href=\"/downloads/PositionedChildWindow.zip\"\u003edownload\u003c/a\u003e\u003c/p\u003e","title":"ChildWindow Positioning"},{"content":"A Silverlight/Wpf ListBoxItem is highlighted when selected or when the mouse hovers over it.\nI need to display a list of items that are not highlighted when selected. This is a common scenario when displaying an inactive list for simply listing out some information.\nListBoxItem\u0026rsquo;s default template can be easily inspected and modified using Expression Blend - Select a ListBoxItem in Objects and Timeline pane, Right click and select Edit template \u0026gt; Edit a Copy. Name you template and save it at the scope of your choice.\nThis will create a copy of the template and allow you to modify it. Switch to the xaml view. Locate the VisualStates of MouseOver, Selected and Focused, and blank them out -\nThe style is applied to the ListBoxItems using ItemContainerStyle -\nHere is the xaml style for the ListBoxItem -\nAfter the style is applied, the ListBoxItems are not highlighted when selected or focused. Here is a live demo of a ListBox that does not highlight when items are selected : remove-listboxitem-hlighting-demo\n","permalink":"https://www.tewari.info/2011/04/29/remove-listboxitem-highlighting/","summary":"\u003cp\u003eA Silverlight/Wpf ListBoxItem is highlighted when selected or when the mouse hovers over it.\u003c/p\u003e\n\u003cp\u003eI need to display a list of items that are not highlighted when selected. This is a common scenario when displaying an inactive list for simply listing out some information.\u003c/p\u003e\n\u003cp\u003eListBoxItem\u0026rsquo;s default template can be easily inspected and modified using Expression Blend - Select a ListBoxItem in Objects and Timeline pane, Right click and select Edit template \u0026gt; Edit a Copy. Name you template and save it at the scope of your choice.\u003c/p\u003e","title":"Remove ListBoxItem Highlighting"},{"content":"1. Create your AppHub account here - http://create.msdn.com. Registration walk through is here.\n2. Unlock your phone - using PhoneReg.exe (usually) located here - \u0026ldquo;C:\\Program Files (x86)\\Microsoft SDKs\\Windows Phone\\v7.0\\Tools\\Phone Registration\\PhoneReg.exe\u0026rdquo;\n3. Sideload xap into your phone. Use XapDeploy.exe (usually) located here - \u0026ldquo;C:\\Program Files (x86)\\Microsoft SDKs\\Windows Phone\\v7.0\\Tools\\XAP Deployment\\XapDeploy.exe\u0026rdquo;\nYou can also deploy straight from Visual Studio to Windows Phone Device. Connect your phone to your computer. Make sure Visual Studio deployment target is \u0026ldquo;Windows Phone 7 Device\u0026rdquo; :\nFrom Toolbar, select Build, Deploy Solution.\n","permalink":"https://www.tewari.info/2010/11/25/sideload-windows-phone/","summary":"\u003cp\u003e1. Create your AppHub account here - \u003ca href=\"http://create.msdn.com\"\u003ehttp://create.msdn.com\u003c/a\u003e. Registration walk through is \u003ca href=\"http://create.msdn.com/en-US/home/about/developer_registration_walkthrough\" title=\"registration-walk-through\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e2. Unlock your phone - using PhoneReg.exe (usually) located here - \u0026ldquo;C:\\Program Files (x86)\\Microsoft SDKs\\Windows Phone\\v7.0\\Tools\\Phone Registration\\PhoneReg.exe\u0026rdquo;\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"wp-Start-WPDevTools\" loading=\"lazy\" src=\"/wp-content/wp-Start-WPDevTools.png\"\u003e\u003cimg alt=\"wp-dev-phone-registration\" loading=\"lazy\" src=\"/wp-content/wp-dev-phone-registration.png\"\u003e\u003c/p\u003e\n\u003cp\u003e3. Sideload xap into your phone. Use XapDeploy.exe (usually) located here - \u0026ldquo;C:\\Program Files (x86)\\Microsoft SDKs\\Windows Phone\\v7.0\\Tools\\XAP Deployment\\XapDeploy.exe\u0026rdquo;\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"wp-app-deployment\" loading=\"lazy\" src=\"/wp-content/wp-app-deployment.png\"\u003e\u003c/p\u003e\n\u003cp\u003eYou can also deploy straight from Visual Studio to Windows Phone Device. Connect your phone to your computer.\nMake sure Visual Studio deployment target is \u0026ldquo;Windows Phone 7 Device\u0026rdquo; :\u003c/p\u003e","title":"Sideload Windows Phone"},{"content":"I just finished presenting here at RDU Code Camp. It was a great crowd ! Here are the slides -\nGetting started with MVVM\nView more presentations from ashtewari.\n","permalink":"https://www.tewari.info/2010/11/06/getting-started-with-mvvm/","summary":"\u003cp\u003eI just finished presenting here at \u003ca href=\"http://codecamp.org/\"\u003eRDU Code Camp\u003c/a\u003e. It was a great crowd ! Here are the slides -\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"http://www.slideshare.net/ashtewari/getting-started-with-mvvm\" title=\"Getting started with MVVM\"\u003eGetting started with MVVM\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eView more \u003ca href=\"http://www.slideshare.net/\"\u003epresentations\u003c/a\u003e from \u003ca href=\"http://www.slideshare.net/ashtewari\"\u003eashtewari\u003c/a\u003e.\u003c/p\u003e","title":"Getting Started with MVVM"},{"content":"How do you rate the presentation overall ? *12345\nIs there anything I could have done to make this presentation more interesting, relevant or useful to you ? (optional)\nWhat did you like the most about the presentation ? (optional)\nWhat is your name ? (optional)\nYour email address (optional)\nNeed assistance with this form?\nReport abuse\n","permalink":"https://www.tewari.info/presentation-feedback-mvvm/","summary":"\u003cp\u003eHow do you rate the presentation overall ? *12345\u003c/p\u003e\n\u003cp\u003eIs there anything I could have done to make this presentation more interesting, relevant or useful to you ? (optional)\u003c/p\u003e\n\u003cp\u003eWhat did you like the most about the presentation ? (optional)\u003c/p\u003e\n\u003cp\u003eWhat is your name ? (optional)\u003c/p\u003e\n\u003cp\u003eYour email address (optional)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.formassembly.com\"\u003e\u003cimg loading=\"lazy\" src=\"http://www.tfaforms.com/images/powered_by_formassembly.gif\"\u003e\u003c/a\u003e\u003ca href=\"http://www.tfaforms.com/forms/help/157750\"\u003eNeed assistance with this form?\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.tfaforms.com/forms/abuse\"\u003eReport abuse\u003c/a\u003e\u003c/p\u003e","title":"Presentation Feedback MVVM"},{"content":" I am presenting a session on Building WPF Application using MVVM (Model-View-ViewModel) on May 15th at the Carolina Code Camp 2010.\nI will dissect a Sample WPF MVVM application and then highlight the most important aspects of the MVVM by coding a brand new ViewModel and incorporating it into the application. You will learn about the Roles of the MVVM triad, the advantages of using MVVM and Characteristics of the ViewModel.\nAttendees will be eligible to win two copies one copy (see below) of Josh Smith\u0026rsquo;s Advanced MVVM book as well as a few other WPF Books.\n{ I will be giving away one hard copy version of the book instead of digital versions due to concerns about DRM protection and unclear gift guidelines at lulu.com }.\nAnd the winner is \u0026hellip; Mark Freeman !!! Congratulations Mark, your copy of \u0026ldquo;Advanced MVVM\u0026rdquo; is on its way. Thanks for attending the code camp and your feedback.\n","permalink":"https://www.tewari.info/2010/05/09/win-advanced-mvvm-book/","summary":"\u003cp\u003e\u003ca href=\"http://joshsmithonwpf.wordpress.com/advanced-mvvm/\"\u003e\u003cimg alt=\"Advanced MVVM Cover\" loading=\"lazy\" src=\"/wp-content/advancedmvvmcover.jpg\"\u003e\u003c/a\u003e I am presenting a session on Building WPF Application using MVVM (\u003ca href=\"http://en.wikipedia.org/wiki/Model_View_ViewModel\" title=\"Wikipedia-MVVM\"\u003eModel-View-ViewModel\u003c/a\u003e) on May 15th at the \u003ca href=\"http://codecamp.developersguild.org/\" title=\"Carolina Code Camp 2010\"\u003eCarolina Code Camp\u003c/a\u003e 2010.\u003c/p\u003e\n\u003cp\u003eI will dissect a Sample WPF MVVM application and then highlight the most important aspects of the MVVM by coding a brand new ViewModel and incorporating it into the application. You will learn about the Roles of the MVVM triad, the advantages of using MVVM and Characteristics of the ViewModel.\u003c/p\u003e","title":"Win Advanced MVVM Book"},{"content":"Here is a simple scenario – I have already merged changesets 45-55 from the trunk to branch b1. After this merge, more changes (56-60) were submitted into the trunk and I now need to merge those changes also to branch b1.\nWhich changesets do you select to merge ? 56-60, right ? Well, not exactly. It depends. If you are using Subversion merge command, you will need to specify 55-60. If you are using TortoiseSVN, you will select 56-60. You should keep this in mind if you are used to TortoiseSVN and you are attempting a merge using SVN merge command. Otherwise, you will end up with a merge without change 56.\nSelecting changes to merge can become non-trivial when you don’t know which changes have already been merged. However, there is good news. With subversion 1.5, when you are selecting changes from source branch to merge into a target branch, don’t do it ! Subversion 1.5 onwards has built-in merge tracking. When using TortoiseSVN, if your intention is to merge all changes, just leave the changeset selection blank. Subversion knows which ones have already been merged and which ones to merge and it does it automatically. You can also select changes that have already been merged and those will be handled (excluded) automatically too.\nThere is a summary of what to expect from Subversion Merge-Tracking feature here - Subversion 1.5 merge-tracking in a nutshell.\nThere is detailed description of Subversion Merge-Tracking here and search for ‘mergeinfo property’ in Subversion documentation.\nThe above screen-shot shows the changes already merged in grey. Thanks to Subversion’s mergeinfo property.\nSo, can I just stop worrying about changesets altogether, when merging ? There are a few caveats to how mergeinfo metadata is (and sometimes not) recorded. Read this for more information - The Final Word on Merge Tracking.\nRead about Subversion merging and branching here and TortoiseSVN merging documentation here – browse down to these sections : Reviewing the Merge Results and Merge Tracking.\n","permalink":"https://www.tewari.info/2010/04/25/svn-merge-selecting-changesets/","summary":"\u003cp\u003eHere is a simple scenario – I have already merged changesets 45-55 from the trunk to branch b1. After this merge, more changes (56-60) were submitted into the trunk and I now need to merge those changes also to branch b1.\u003c/p\u003e\n\u003cp\u003eWhich changesets do you select to merge ? 56-60, right ? Well, not exactly. It depends. If you are using \u003ca href=\"http://subversion.tigris.org/\"\u003eSubversion\u003c/a\u003e merge command, you will need to specify 55-60. If you are using \u003ca href=\"http://tortoisesvn.net/\"\u003eTortoiseSVN\u003c/a\u003e, you will select 56-60. You should keep this in mind if you are used to TortoiseSVN and you are attempting a merge using SVN merge command. Otherwise, you will end up with a merge without change 56.\u003c/p\u003e","title":"SVN Merge - Selecting Changesets"},{"content":"If you want to abort a commit if your code fails certain rule and you don\u0026rsquo;t have access to the SVN Server to configure a hook. What do you do ?\nAssuming you are using TortoiseSVN, you can configure a Client-Side hook.\nHere is an example - Say you want to abort commit if you have a comment in your code that starts with //Do Not Commit. You can create a PowerShell script that validates all the files in your changeset and use this script as a Client-Side pre_commit_hook in TortoiseSVN.\nTortoiseSVN-Settings-HookScripts\nThe pre_commit_hook configuration :\nConfigure-Hook-Scripts\n//Powershell script : pre_commit.ps1\n$donotcommit = \u0026ldquo;//Do Not Commit\u0026rdquo;;\n$changeset = Get-Content$args[0];\nforeach($file in $changeset) { if( Get-Content$file | Select-String$donotcommit-quiet ) { Write-Error \u0026ldquo;$file contains code that you are not supposed to commit. [$donotcommit]\u0026rdquo;; exit9; } }\nNow, if your changeset has a file with a comment starting with //Do Not Commit and you click on OK to commit this change, the commit will be aborted with this error message -\npre_commit_hook-validation\n","permalink":"https://www.tewari.info/2010/03/31/code-validation-in-tortoisesvn-pre_commit_hook/","summary":"\u003cp\u003eIf you want to abort a commit if your code fails certain rule and you don\u0026rsquo;t have access to the \u003ca href=\"http://subversion.tigris.org/\" title=\"svn\"\u003eSVN\u003c/a\u003e Server to configure a hook. What do you do ?\u003c/p\u003e\n\u003cp\u003eAssuming you are using \u003ca href=\"http://tortoisesvn.tigris.org/\" title=\"tortoisesvn\"\u003eTortoiseSVN\u003c/a\u003e, you can configure a \u003ca href=\"http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html#client-side-hooks\" title=\"tortoisesvn-client-side-hook\"\u003eClient-Side hook\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHere is an example - Say you want to abort commit if you have a comment in your code that starts with \u003cstrong\u003e//Do Not Commit\u003c/strong\u003e. You can create a \u003ca href=\"http://en.wikipedia.org/wiki/Windows_PowerShell\" title=\"wikipedia-powershell\"\u003ePowerShell\u003c/a\u003e script that validates all the files in your changeset and use this script as a Client-Side pre_commit_hook in TortoiseSVN.\u003c/p\u003e","title":"Code Validation in TortoiseSVN pre_commit_hook"},{"content":"I am presenting at SoCalCodeCamp this weekend (January 30th, 2010) - Advanced WPF - Using Model-View-ViewModel in WPF Applications.\ntasklist-mockup\nAgenda :\n1. Roles of the M-V-VM triad\n2. Why use M-V-VM ?\n3. Characteristics of the ViewModel\n4. Build a Sample WPF Application using M-V-VM\nResources :\nMSDN Magazine Article and Sample Application Download Martin Fowler’s description of the ‘Presentation Model ‘ Jeremy Miller’s ‘Build Your Own CAB’ series ","permalink":"https://www.tewari.info/2010/01/25/using-model-view-viewmodel-in-wpf-applications/","summary":"\u003cp\u003eI am presenting at \u003ca href=\"http://www.socalcodecamp.com/\" title=\"socalcodecamp website\"\u003eSoCalCodeCamp\u003c/a\u003e this weekend (January 30th, 2010) - \u003ca href=\"http://www.socalcodecamp.com/socalcodecamp/session.aspx?sid=0b2ee44f-595d-4f55-a5d6-2b1293f546d0\" title=\"WPF MVVM Presntation \"\u003eAdvanced WPF - Using Model-View-ViewModel in WPF Applications\u003c/a\u003e.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/tasklist.png\"\n         alt=\"tasklist-mockup\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003etasklist-mockup\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAgenda :\u003c/p\u003e\n\u003cp\u003e1. Roles of the M-V-VM triad\u003c/p\u003e\n\u003cp\u003e2. Why use M-V-VM ?\u003c/p\u003e\n\u003cp\u003e3. Characteristics of the ViewModel\u003c/p\u003e\n\u003cp\u003e4. Build a Sample WPF Application using M-V-VM\u003c/p\u003e\n\u003cp\u003eResources :\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003ca href=\"http://msdn.microsoft.com/en-us/magazine/dd419663.aspx\" title=\"MSDN Magazine Article\"\u003eMSDN Magazine Article\u003c/a\u003e and Sample Application \u003ca href=\"http://code.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx\" title=\"Download Demo Application Code\"\u003eDownload\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://martinfowler.com/eaaDev/PresentationModel.html\" title=\"MartinFowler.com\"\u003eMartin Fowler’s description of the ‘Presentation Model ‘\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://codebetter.com/blogs/jeremy.miller/archive/2007/07/25/the-build-your-own-cab-series-table-of-contents.aspx\" title=\"Jeremy Miller's - Build Your CAB\"\u003eJeremy Miller’s ‘Build Your Own CAB’ series\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Using Model-View-ViewModel in WPF Applications"},{"content":"I have NEC SuperScript 870 laser printer connected to my Home PC. I was not able to print to this printer from my new HP dv6-1375dx Windows 7 laptop. My machines are connected via Hamachi. Here is what I did to get around the lack of NEC driver for Windows 7 (I found this tip here) -\n1. Created a new printer (pointing to the same LPT port that is connected to NEC 870) on my Home PC using HP Laser Jet III driver.\n2. Shared this new printer.\n3. On the Windows 7 laptop, I dropped the document I wanted to print on this new printer. Voila !!!\n","permalink":"https://www.tewari.info/2010/01/23/use-legacy-printer-from-windows-7/","summary":"\u003cp\u003eI have NEC SuperScript 870 laser printer connected to my Home PC. I was not able to print to this printer from my new HP dv6-1375dx Windows 7 laptop. My machines are connected via \u003ca href=\"http://www.LogMeIn.com\" title=\"hamachi\"\u003eHamachi\u003c/a\u003e. Here is what I did to get around the lack of NEC driver for Windows 7 (I found this tip \u003ca href=\"http://social.technet.microsoft.com/Forums/en/w7itprohardware/thread/c2650495-a9f6-4ead-a1d0-aa9c0b265af3\" title=\"social.technet.microsoft.com\"\u003ehere\u003c/a\u003e) -\u003c/p\u003e\n\u003cp\u003e1. Created a new printer (pointing to the same LPT port that is connected to NEC 870) on my Home PC using HP Laser Jet III driver.\u003c/p\u003e","title":"Use Legacy Printer From Windows 7"},{"content":"Take a look at these trend lines from Indeed.com (Yes, you read that right. That is EIGHTY THOUSAND percent growth in silverlight jobs) -\nHere is the trend line for Flash jobs -\nGrowth is there but the total number of jobs are clearly stabilizing. Here are the absolute number of jobs -\nInteresting numbers !!!\n","permalink":"https://www.tewari.info/2009/11/22/should-you-get-into-silverlight-or-flash/","summary":"\u003cp\u003eTake a look at these trend lines from Indeed.com (Yes, you read that right. That is \u003cstrong\u003eEIGHTY THOUSAND percent\u003c/strong\u003e growth in silverlight jobs) -\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.indeed.com/jobtrends?q=silverlight\u0026amp;relative=1\u0026amp;relative=1\" title=\"silverlight Job Trends\"\u003e\u003cimg alt=\"silverlight Job Trends graph\" loading=\"lazy\" src=\"http://www.indeed.com/trendgraph/jobgraph.png?q=silverlight\u0026relative=1\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eHere is the trend line for Flash jobs -\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.indeed.com/jobtrends?q=flash\u0026amp;relative=1\u0026amp;relative=1\" title=\"flash Job Trends\"\u003e\u003cimg alt=\"flash Job Trends graph\" loading=\"lazy\" src=\"http://www.indeed.com/trendgraph/jobgraph.png?q=flash\u0026relative=1\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eGrowth is there but the total number of jobs are clearly stabilizing. Here are the absolute number of jobs -\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.indeed.com/jobtrends?q=silverlight%2C+flash\" title=\"silverlight, flash Job Trends\"\u003e\u003cimg alt=\"silverlight, flash Job Trends graph\" loading=\"lazy\" src=\"http://www.indeed.com/trendgraph/jobgraph.png?q=silverlight%2C+flash\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"Should you get into Silverlight or Flash ?"},{"content":"SoCal Code Camp is coming up on November 21st \u0026amp; 22nd 2009 at University of Southern California, Los Angeles. There is just an incredible lineup of sessions. If you are trying to make up your mind about the sessions to attend, here are my recommendations -\n1. Attend as many of Llewellyn Falco\u0026rsquo;s and Woody Zuill\u0026rsquo;s sessions as you can. Specially, Unit Testing The Easy Way and one of the Dojo sessions. Any one of these sessions will make your entire trip worthwhile.\n2.Kristian Hermansen\u0026rsquo;s Get Hacked Live ..\n3. Stacey Broadwell\u0026rsquo;s Using Technology \u0026amp; Social Media to Target Candidates \u0026amp; Jobs should be very useful. I attended her recent presentation at L.A. Dot Net @ UCLA, it was very informative.\n4. and of course If it walks like a Scrum \u0026hellip; by yours sincerely.\nI am planning to attend as many of the following sessions as the schedule allows -\n\\* Algorithmic Trading in C# scott hodson\\* Automated Grid layout in Silverlight and WPF Richard Fencel\\* Building nTier Applications with Entity Framework Services David McCarter\\* Experiencing Agile Through Games Carlton Nettleton\\* Interoperability in the Cloud Alejandro Espinoza\\* Rapid Prototyping with Expression Blend mark bosley\n\\* One of Paul Sheriff\u0026rsquo;s WPF presentations\\* SCRUM CLUB: Agile Requirements Gathering Workshop! Amanda Abelove\nSee you there !\n","permalink":"https://www.tewari.info/2009/11/12/session-recommendations-for-socal-code-camp-usc/","summary":"\u003cp\u003e\u003ca href=\"http://www.socalcodecamp.com/\" title=\"SoCal Code Camp Home\"\u003eSoCal Code Camp\u003c/a\u003e is coming up on November 21st \u0026amp; 22nd 2009 at University of Southern California, Los Angeles. There is just an incredible lineup of sessions. If you are trying to make up your mind about the \u003ca href=\"http://www.socalcodecamp.com/sessions.aspx\" title=\"SoCal Code Camp Sessions\"\u003esessions\u003c/a\u003e to attend, here are my recommendations -\u003c/p\u003e\n\u003cp\u003e1. Attend as many of \u003ca href=\"http://www.socalcodecamp.com/presenters.aspx#LlewellynFalco\" title=\"Llewellyn Falco\"\u003eLlewellyn Falco\u0026rsquo;s\u003c/a\u003e and \u003ca href=\"http://www.socalcodecamp.com/presenters.aspx#WoodyZuill\" title=\"Woody Zuill\"\u003eWoody Zuill\u003c/a\u003e\u0026rsquo;s sessions as you can. Specially, \u003ca href=\"http://www.socalcodecamp.com/session.aspx?sid=9517fe67-b29d-4e24-b707-c62f53c133a3\" title=\"Unit Testing Session\"\u003eUnit Testing The Easy Way\u003c/a\u003e and one of the \u003ca href=\"http://www.socalcodecamp.com/session.aspx?sid=84c8777a-e7d8-4ba1-90e1-637f9f213ad5\" title=\"sunday\"\u003eDojo\u003c/a\u003e \u003ca href=\"http://www.socalcodecamp.com/session.aspx?sid=8b0f26e9-c5a5-4c7f-b81f-66e13704ff84\" title=\"sat\"\u003esessions\u003c/a\u003e. Any one of these sessions will make your entire trip worthwhile.\u003c/p\u003e","title":"Session Recommendations for SoCal Code Camp @ USC"},{"content":"DbUpdater can be used with mysql.\nHere are the files you need to jumpstart the integration - DbUpdater-MySql.zip\n1. You might need to change the path to mysql.exe in mysql-exec.bat.\n2. Modify values in mysql-sample-command-line.bat.\nMake sure mysql.data.dll is placed in GAC or in the same directory as DbUpdater.exe. Connector binaries can be downloaded from here - http://dev.mysql.com/downloads/connector/net/6.1.html\n","permalink":"https://www.tewari.info/2009/09/28/using-dbupdater-with-mysql/","summary":"\u003cp\u003e\u003ca href=\"/dbupdater/\" title=\"DbUpdater Page\"\u003eDbUpdater\u003c/a\u003e can be used with \u003ca href=\"http://www.mysql.com/\" title=\"mysql.com\"\u003emysql\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eHere are the files you need to jumpstart the integration - \u003ca href=\"/downloads/DbUpdater-MySql.zip\" title=\"DbUpdater-MySql.zip\"\u003eDbUpdater-MySql.zip\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e1. You might need to change the path to mysql.exe in mysql-exec.bat.\u003c/p\u003e\n\u003cp\u003e2. Modify values in mysql-sample-command-line.bat.\u003c/p\u003e\n\u003cp\u003eMake sure mysql.data.dll is placed in GAC or in the same directory as DbUpdater.exe. Connector binaries can be downloaded from here -\n\u003ca href=\"http://dev.mysql.com/downloads/connector/net/6.1.html\" title=\"MySql .NET Connector Download\"\u003ehttp://dev.mysql.com/downloads/connector/net/6.1.html\u003c/a\u003e\u003c/p\u003e","title":"Using DbUpdater with MySql"},{"content":"My invitation code for SQL Azure CTP finally arrived. I had been waiting for this.\nYou can create a database in from the SQL Azure Management page, shown above.\nAfter you have created the database, of course, you can use DbUpdater with your SQL Azure databases. Here is the command-line : DbUpdater.exe ..\\SqlScripts /server:\u0026ldquo;tcp:SERVER.ctp.database.windows.net\u0026rdquo; /db:DATABASE /user:\u0026ldquo;USER@SERVER\u0026rdquo; /password:PASSWORD /confirm:true\nAnd you will need this DbUpdater.exe.config file :\n\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e You can run sqlcmd.exe directly to execute t-sql scripts on SQL Azure. Here is a sample command : sqlcmd.exe -S SERVER.ctp.database.windows.net -U USER@SERVER -P PASSWORD -d DB -i \u0026ldquo;baseline.sql\u0026rdquo;\nI received these errors when I executed my SQL Server 2005 scripts on a SQL Azure database -\n\u0026lsquo;ANSI_NULLS\u0026rsquo; is not a recognized SET option. Deprecated feature \u0026lsquo;SET ANSI_PADDING OFF\u0026rsquo; is not supported in this version of SQL Server. Deprecated feature \u0026lsquo;More than two-part column name\u0026rsquo; is not supported in this version of SQL Server. Deprecated feature \u0026lsquo;Data types: text ntext or image\u0026rsquo; is not supported in this version of SQL Server. Deprecated feature \u0026lsquo;Table hint without WITH\u0026rsquo; is not supported in this version of SQL Server. These are not the limitations of the SQL Azure platform. SQL Azure is based on SQL Server 2008 Database Engine. The complete list of deprecated features in SQL Server 2008 are listed here along with the replacements (if any) : Deprecated Database Engine Features in SQL Server 2008 - MSDN. After modifying the scripts to replace the deprecated features, the scripts could be executed without any further issues. All stored procedures, triggers and views were created without any errors.\nThe following error is a SQL Azure limitation.\n\u0026lsquo;Filegroup reference and partitioning scheme\u0026rsquo; is not supported in this version of SQL Server. Here is more detailed information on unsupported T-SQL - Unsupported Transact-SQL Statements (SQL Azure Database) - MSDN\n","permalink":"https://www.tewari.info/2009/09/10/sql-azure-notes/","summary":"\u003cp\u003eMy invitation code for \u003ca href=\"http://www.microsoft.com/azure/sql.mspx\"\u003eSQL Azure CTP\u003c/a\u003e finally arrived. I had been waiting for this.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"sqlazure-manage.png\" loading=\"lazy\" src=\"/images/sqlazure-manage.png\"\u003e\u003c/p\u003e\n\u003cp\u003eYou can create a database in from the SQL Azure Management page, shown above.\u003c/p\u003e\n\u003cp\u003eAfter you have created the database, of course, you can use \u003ca href=\"/dbupdater/\"\u003eDbUpdater\u003c/a\u003e with your SQL Azure databases. Here is the command-line :\nDbUpdater.exe ..\\SqlScripts /server:\u0026ldquo;tcp:SERVER.ctp.database.windows.net\u0026rdquo; /db:DATABASE /user:\u0026ldquo;USER@SERVER\u0026rdquo; /password:PASSWORD /confirm:true\u003c/p\u003e\n\u003cp\u003eAnd you will need this DbUpdater.exe.config file :\u003c/p\u003e\n\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\u003cconfiguration\u003e\n\u003cappSettings\u003e\n\u003cadd key=\"file-prefix\" value=\"db\" /\u003e\n\u003cadd key=\"file-extension\" value=\"sql\" /\u003e\n\u003cadd key=\"schema-versions-name\" value=\"schema-versions-table.sql\" /\u003e\n\u003cadd key=\"baseline-name\" value=\"baseline.sql\" /\u003e\n\u003cadd key=\"post-script-prefix\" value=\"post\" /\u003e\n\u003cadd key=\"post-script-always-apply\" value=\"true\" /\u003e\n\u003cadd key=\"exe-file\" value=\"C:\\\\Program Files\\\\Microsoft SQL Server\\\\90\\\\Tools\\\\Binn\\\\SQLCMD.EXE\" /\u003e\n\u003cadd key=\"exe-args\" value='-U %UserName% -P %Password% -S \"%ServerName%\" -d %DbName% -i \"%SqlFile%\"' /\u003e\n\u003cadd key=\"dialect\" value=\"NHibernate.Dialect.MsSql2000Dialect\" /\u003e\n\u003cadd key=\"driver\\_class\" value=\"NHibernate.Driver.SqlClientDriver\" /\u003e\n\u003cadd key=\"connection\\_string\" value=\"Server=%ServerName%;Database=%DbName%;User ID=%UserName%;Password=%Password%;Trusted\\_Connection=False;\" /\u003e\n\u003c/appSettings\u003e\n\u003c/configuration\u003e\n\u003cp\u003eYou can run sqlcmd.exe directly to execute t-sql scripts on SQL Azure. Here is a sample command :\nsqlcmd.exe -S SERVER.ctp.database.windows.net -U USER@SERVER -P PASSWORD -d DB -i \u0026ldquo;baseline.sql\u0026rdquo;\u003c/p\u003e","title":"SQL Azure Notes"},{"content":"3c-ash is a Wordpress child theme for Thematic theme framework. It is a content oriented, 3 column, flexible width layout with an additional widgetized sidebar area below main asides.Download here : 3c-ash.v0.1.zip - License : GPL (v2)\n3c-ash-theme-screenshot\n","permalink":"https://www.tewari.info/3c-ash-thematic-child-theme/","summary":"\u003ch2 id=\"3c-ash\"\u003e\u003cstrong\u003e\u003ca href=\"/\" title=\"3c-ash-thematic-child-theme\"\u003e\u003cstrong\u003e3c-ash\u003c/strong\u003e\u003c/a\u003e is a \u003ca href=\"http://wordpress.org/\" title=\"wordpress.org\"\u003eWordpress\u003c/a\u003e child theme for \u003ca href=\"http://themeshaper.com/thematic/\" title=\"Thematic\"\u003eThematic\u003c/a\u003e theme framework.\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eIt is a content oriented, 3 column, flexible width layout with an additional widgetized sidebar area below main asides.\u003cstrong\u003eDownload here : \u003ca href=\"/downloads/3c-ash.v0.1.zip\" title=\"3c-ash.v0.1.zip\"\u003e3c-ash.v0.1.zip\u003c/a\u003e - License : \u003ca href=\"http://www.gnu.org/licenses/old-licenses/gpl-2.0.html\" title=\"license-gpl-v3\"\u003eGPL (v2)\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cfigure\u003e\u003ca href=\"/\"\u003e\n    \u003cimg loading=\"lazy\" src=\"/images/3c-ash-theme-screenshot-zoom.png\"\n         alt=\"3c-ash-theme-screenshot\"/\u003e \u003c/a\u003e\u003cfigcaption\u003e\n            \u003cp\u003e3c-ash-theme-screenshot\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e","title":"3c-ash : Thematic Child Theme"},{"content":"Finalized online backup solution : JungleDisk. I can run it on all of my machines without paying extra. I get to keep the ownership of my data - by using my own Amazon S3 storage. Backed up all family photos - all 30 GBs. Feeling good :)\n","permalink":"https://www.tewari.info/2009/08/25/online-backup-solution/","summary":"\u003cp\u003eFinalized online backup solution : \u003ca href=\"http://www.jungledisk.com\" title=\"jungledisk\"\u003eJungleDisk\u003c/a\u003e. I can run it on all of my machines \u003ca href=\"http://jungledisk.com/desktop/how.aspx\" title=\"jungledisk-features\"\u003ewithout paying extra\u003c/a\u003e. I get to keep the ownership of my data - by using my own \u003ca href=\"http://aws.amazon.com/s3/\" title=\"amazon-s3\"\u003eAmazon S3\u003c/a\u003e storage. Backed up all family photos - all 30 GBs. Feeling good :)\u003c/p\u003e","title":"Online Backup Solution"},{"content":"I have switched to Thematic theme on this blog over the weekend. I created a child theme after playing around with the customization hooks. I added a widgetized area below main asides, did some css modifications and created a three column, flexible layout just the way I wanted. I am so glad I switched to Thematic. ThemeShaper ForumsThemeShaper forums are very helpful. These articles were just what I needed to get started : How to make a child theme for WordPress and How I used a WordPress Child Theme To Redesign My Blog.\n","permalink":"https://www.tewari.info/2009/08/24/switched-to-thematic/","summary":"\u003cp\u003eI have switched to \u003ca href=\"http://themeshaper.com/thematic/\" title=\"Thematic\"\u003eThematic\u003c/a\u003e theme on this blog over the weekend. I created a child theme after playing around with the customization hooks. I added a widgetized area below main asides, did some css modifications and created a three column, flexible layout just the way I wanted. I am so glad I switched to Thematic. \u003ca href=\"http://themeshaper.com/forums/\" title=\"ThemeShaper Forums\"\u003eThemeShaper Forums\u003c/a\u003e\u003ca href=\"http://themeshaper.com/\" title=\"ThemeShaper\"\u003eThemeShaper\u003c/a\u003e forums are very helpful. These articles were just what I needed to get started : \u003ca href=\"http://op111.net/53\" title=\"op111.net\"\u003eHow to make a child theme for WordPress\u003c/a\u003e and \u003ca href=\"http://themeshaper.com/functions-php-wordpress-child-themes/\" title=\"ThemeShaper.com\"\u003eHow I used a WordPress Child Theme To Redesign My Blog\u003c/a\u003e.\u003c/p\u003e","title":"Switched to Thematic"},{"content":"SoCal CodeCamp was a blast. Thanks to everyone who attended my presentation : If it walks like a Scrum.\nThe slide-deck can be downloaded from here.\n","permalink":"https://www.tewari.info/2009/06/30/is-scrum-bad-for-developers/","summary":"\u003cp\u003e\u003ca href=\"http://www.socalcodecamp.com/\" title=\"http://www.socalcodecamp.com/\"\u003eSoCal CodeCamp\u003c/a\u003e was a blast. Thanks to everyone who attended my presentation : \u003ca href=\"http://www.socalcodecamp.com/session.aspx?sid=bb64801e-7bbe-4b9f-9ca3-4f8975270ff0\" title=\"http://www.socalcodecamp.com/session.aspx?sid=bb64801e-7bbe-4b9f-9ca3-4f8975270ff0\"\u003eIf it walks like a Scrum\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe slide-deck can be downloaded from \u003ca href=\"/downloads/If_it_walks_like_a_Scrum.7z\" title=\"download-If_it_walks_like_a_Scrum.7z\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"If it walks like a Scrum.png\" loading=\"lazy\" src=\"/images/If%20it%20walks%20like%20a%20Scrum.png\"\u003e\u003c/p\u003e","title":"Is Scrum Bad For Developers ?"},{"content":"Special purpose UI prototyping tools, like the ones listed on C2 Wiki, offer a convenient blend of usability and flexibility. I have tried some of these tools. I was looking for something that -\ndoesn\u0026rsquo;t become unwieldy when used to prototype a large and complex GUI\nallows me to use my own screenshots/images/icons\nallows me to modify the prototype without making it a hair-pulling experience.\ncan prototype all aspects and artifacts of modern web and desktop interfaces, specially -\ntree controls - you will be surprised how many prototyping tools don\u0026rsquo;t have this. Pencil, I am looking at you :) tabbed panels - can you position your tabs at the bottom ? on the right edge ? film strips ribbons NavBars The one that met all these requirements and more (and blew me away) is Balsamiq Mockup. Disclaimer : I requested and received a complimentary license from Balsamiq.\n[youtube]zLysy3IPfFI[/youtube]\nBalsamiq Mockup\u0026rsquo;s usability is what attracted me at first and then it was just a series of surprises, one after another. You can click on the widget \u0026ldquo;legend\u0026rdquo; to toggle aspects of the widget on and off. Very slick ! You can link (aspects of) widgets to other mockups. This allows you to build some interactivity into your prototype. Very cool ! You can clone a mockup with a button click - to prototype a transition. I could use my own images/screenshots and sketch them (basically, applies a sketch transformation on the image) !!! If you think that sketchy look of the prototypes looks unfinished, you should read this. Here are some things I wish I could have in Balsamiq -\nname (and search for) individual widgets in my mockup select multiple widgets by dragging over an area auto-group when dropped on containers (or other widgets) stretching container stretches everything in it, I wish I could have some control over it register my own mockups as library widgets zoom in and out Just to be thorough, here are some other approaches I have used in the past -\nUsing a RAD tool like VisualStudio is great way to prototype. You have to be very proficient, like a GUI developer ;) , with the tool of your choice. Otherwise, it is can be an excruciatingly slow approach. The best part of this approach is that the interactions can be prototyped seemlessly and some of the feasibility doubts can be cleared early on. The problem with this approach is that the prototype can be mistaken as the actual product and the effort /scheduling expectations of the stakeholders can become hard to manage. Read Joel Spolsky\u0026rsquo;s brilliant observations on The Iceberg Secret, Revealed. Also, when the prototype looks like a finished product, type of feedback you receive is usually not strategic, it is narrower. Read more about this on Creating Passionate Users article. When you have an existing UI (perhaps from a 3rd-party library\u0026rsquo;s demos) that can become the basis for your new UI, it makes sense to use screenshots of your existing UI and modify them using image editors like Paint.NET or Photoshop or even MS Paint. It is a quick way to produce a prototype but the expected changes to the prototype must be minimal. Otherwise, you will find yourself spending long hours with your image editor. General purpose drawing programs, like dia and Visio, can be used to create UI prototypes. With these type of tools, you will probably need to work with building blocks that are a bit too granular, although you may be able to procure widgets/stencils for some of these tools to make things easier. These tools have a some learning curve and less than fluid usability. ","permalink":"https://www.tewari.info/2009/05/16/gui-prototyping-tools/","summary":"\u003cp\u003eSpecial purpose UI prototyping tools, like the ones listed on \u003ca href=\"http://c2.com/cgi/wiki?GuiPrototypingTools\"\u003eC2 Wiki\u003c/a\u003e, offer a convenient blend of usability and flexibility. I have tried some of these tools. I was looking for something that -\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003edoesn\u0026rsquo;t become unwieldy when used to prototype a large and complex GUI\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eallows me to use my own screenshots/images/icons\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eallows me to modify the prototype without making it a hair-pulling experience.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ecan prototype all aspects and artifacts of \u003ca href=\"http://www.balsamiq.com/products/mockups/examples\"\u003emodern web and desktop interfaces\u003c/a\u003e, specially -\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003etree controls  - you will be surprised how many prototyping tools don\u0026rsquo;t have this. \u003ca href=\"http://www.evolus.vn/Pencil/\"\u003ePencil\u003c/a\u003e, I am looking at you :)\u003c/li\u003e\n\u003cli\u003etabbed panels  - can you position your tabs at the bottom ? on the right edge ?\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.codeproject.com/KB/miscctrl/CustomFilmstripControl.aspx\"\u003efilm strips\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.devexpress.com/Products/NET/Controls/WinForms/Bars/Features_Ribbon.xml\"\u003eribbons\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.devexpress.com/Products/NET/Controls/WinForms/NavBar/\"\u003eNavBars\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e","title":"GUI Prototyping Tools"},{"content":"My 18 month old son woke me up at 4 in the morning. I got him to go back to sleep, but \u0026hellip; and here I am writing.\nA few weeks ago, I downloaded Scratch from M.I.T\u0026rsquo;s website. Scratch is a programming language for kids. You drag/drop and (literally) snap together programming constructs to create games. Within a couple of minutes, I had a diver chasing a ball bouncing around on the screen.\nI showed it to my 5 year old son and he watched as I \u0026ldquo;changed the game\u0026rdquo; and had the ball chase the mouse cursor and the diver chase the ball. He sat down with me and asked me if I could make it a dog chasing the ball instead. Sure! Then we started customizing further. Make it run faster .. Yeah! Let\u0026rsquo;s turn him into Clifford - The Big Red Dog \u0026hellip; Can he bark ? Sure. Let\u0026rsquo;s turn it into a basket ball .. I want it red, blue, yellow, \u0026hellip; Let\u0026rsquo;s make a basket ball hoop and have Clifford play basketball \u0026hellip; Sure.\nIt was a quite productive pair programming session :) . No TDD yet - he is too young for that kind of stuff :) .\nI was relieved that I didn\u0026rsquo;t loose his attention while I was \u0026ldquo;programming\u0026rdquo;. Now, my son does have a pretty long attention span for his age, but a lot of credit goes to the designers of Scratch. The entire \u0026ldquo;artwork\u0026rdquo; was created within the Scratch application and the \u0026ldquo;programming\u0026rdquo; was just a pure joy for my son. And we were just \u0026ldquo;scratching\u0026rdquo; the surface there. Explore the possibilities here.\nYou can download the game here : Clifford-ball.sb. Be careful, sometimes the dog turns upside down. There are some bugs to be fixed :) . Where is the debugger ?\n","permalink":"https://www.tewari.info/2009/04/11/create-games-from-scratch/","summary":"\u003cp\u003eMy 18 month old son woke me up at 4 in the morning. I got him to go back to sleep, but \u0026hellip; and here I am writing.\u003c/p\u003e\n\u003cp\u003eA few weeks ago, I downloaded \u003ca href=\"http://scratch.mit.edu/\"\u003eScratch\u003c/a\u003e from M.I.T\u0026rsquo;s website. Scratch is a programming language for kids. You drag/drop and (literally) snap together programming constructs to create games. Within a couple of minutes, I had a diver chasing a ball bouncing around on the screen.\u003c/p\u003e","title":"Create Games From Scratch"},{"content":"I will be attending Jason Beres\u0026rsquo; \u0026ldquo;RIA with Silverlight and WCF\u0026rdquo; lecture on Saturday the 4th. Check-out the details here : Los Angeles .NET Developers Group. Let me know If you are planning to be there. It will be a great opportunity to meet.\n","permalink":"https://www.tewari.info/2009/03/26/ria-with-silverlight-and-wcf-los-angeles-net-developers-group/","summary":"\u003cp\u003eI will be attending \u003ca href=\"http://geekswithblogs.net/jberes/Default.aspx\" title=\"Jason Beres' Blog\"\u003eJason Beres\u0026rsquo;\u003c/a\u003e \u0026ldquo;RIA with Silverlight and WCF\u0026rdquo; lecture on Saturday the 4th. Check-out the details here : \u003ca href=\"http://ladotnet.org/default.asp\" title=\"Los Angeles .NET Developers Group\"\u003eLos Angeles .NET Developers Group.\u003c/a\u003e Let me know If you are planning to be there. It will be a great opportunity to meet.\u003c/p\u003e","title":"RIA with Silverlight and WCF - Los Angeles .NET Developers Group"},{"content":"We have a 3-4 month contract position open for a Windows GUI Developer in our group at Calabasas, California:\n2+ years experience developing C++/C# Windows thick-client applications Expert in GUI development on Windows Expert in Object Oriented Analysis and Design (OOA/OOD) Deep understanding of client-server software development Experience in multithreading, and thread synchronization Excellent communication skills (written and verbal) Highly organized and detail oriented BSCS/BSEE or equivalent If you are interested, contact me. The position is available now.\n","permalink":"https://www.tewari.info/2009/03/09/job-opening-windows-gui-developer/","summary":"\u003cp\u003eWe have a 3-4 month contract position open for a Windows GUI Developer in our group at \u003ca href=\"http://maps.google.com/maps?q=calabasas,+CA\u0026amp;oe=utf-8\u0026amp;rls=org.mozilla:en-US:official\u0026amp;client=firefox-a\u0026amp;um=1\u0026amp;ie=UTF-8\u0026amp;split=0\u0026amp;gl=us\u0026amp;ei=SYK1SbXHGM-jtgf9jaXqDA\u0026amp;sa=X\u0026amp;oi=geocode_result\u0026amp;resnum=1\u0026amp;ct=title\" title=\"calabasas-map\"\u003eCalabasas, California\u003c/a\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e2+ years experience developing C++/C# Windows thick-client applications\u003c/li\u003e\n\u003cli\u003eExpert in GUI development on Windows\u003c/li\u003e\n\u003cli\u003eExpert in Object Oriented Analysis and Design (OOA/OOD)\u003c/li\u003e\n\u003cli\u003eDeep understanding of client-server software development\u003c/li\u003e\n\u003cli\u003eExperience in multithreading, and thread synchronization\u003c/li\u003e\n\u003cli\u003eExcellent communication skills (written and verbal)\u003c/li\u003e\n\u003cli\u003eHighly organized and detail oriented\u003c/li\u003e\n\u003cli\u003eBSCS/BSEE or equivalent\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you are interested, \u003ca href=\"/contact-me/\" title=\"Contact Ash Tewari\"\u003econtact me\u003c/a\u003e. The position is available now.\u003c/p\u003e","title":"Job Opening - Windows GUI Developer"},{"content":"List of Scrum Tools:\nhttp://www.versionone.com/index.asp http://www.targetprocess.com/ http://studios.thoughtworks.com/mingle-agile-project-management http://www.bananascrum.com/ http://www.danube.com/scrumworks http://www.rallydev.com/ http://www.toolsforagile.com/ Other Lists:\nScrum Tools-Roundup dave_froslie ","permalink":"https://www.tewari.info/2009/03/08/scrum-tools/","summary":"\u003cp\u003eList of Scrum Tools:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://www.versionone.com/index.asp\" title=\"VersionOne\"\u003ehttp://www.versionone.com/index.asp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.targetprocess.com/\" title=\"TargetProcess\"\u003ehttp://www.targetprocess.com/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://studios.thoughtworks.com/mingle-agile-project-management\" title=\"Mingle\"\u003ehttp://studios.thoughtworks.com/mingle-agile-project-management\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.bananascrum.com/\" title=\"BananaScrum\"\u003ehttp://www.bananascrum.com/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.danube.com/scrumworks\" title=\"ScrumWorks\"\u003ehttp://www.danube.com/scrumworks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.rallydev.com/\" title=\"Rally\"\u003ehttp://www.rallydev.com/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.toolsforagile.com/\" title=\"Silver Catalyst\"\u003ehttp://www.toolsforagile.com/\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther Lists:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://weblogs.asp.net/bsimser/archive/2006/10/21/Scrum-Tools-Roundup.aspx\"\u003eScrum Tools-Roundup\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blogs.msdn.com/dave_froslie/archive/2005/12/15/504251.aspx\"\u003edave_froslie\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Scrum Tools"},{"content":"","permalink":"https://www.tewari.info/notes/","summary":"","title":"Notes"},{"content":"I have been playing with JetBrains ReSharper(version 4.1) and DevExpress CodeRush + Refactor! Pro (version 3.2.2) lately. I wanted to decide on which one to go with. Here are some notes -\nR# = ReSharper CodeRush = CodeRush + Refactor! Pro\nR# seems to be better for refactoring, because it does not assume that I follow a rigid work flow when writing code. For example, I don\u0026rsquo;t always decide on the class hierarchies upfront. I do discover them as I write code. So, when I discover that I need to extract a base class from the class I am working on, I can do so with R#. I couldn\u0026rsquo;t find a way to do extract a base/super class with CodeRush. In R#, I can create an overloaded constructor using \u0026ldquo;Change Signature\u0026rdquo; refactoring (Ctrl+R, S). I couldn\u0026rsquo;t find a way to do this in CodeRush. CodeRush does allow me to create overloaded methods. However, comparisons that only focus on how many refactorings each tool can do are not very important to me. After all, it should be easy for the individual missing refactorings to be implemented in the subsequent releases of these tools. I want to know which one is a better investment in the long run. The investment is not just a couple of hundred dollars, it is going to be an investment of time too.\nR# \u0026ldquo;finds\u0026rdquo; Types as you try to use them and adds references and \u0026ldquo;using\u0026rdquo; directives from other projects in your solution. You will not believe how useful this is! You don\u0026rsquo;t have to interrupt your train of thought to go add references and \u0026ldquo;using\u0026rdquo; directives. CodeRush doesn\u0026rsquo;t do that. I found R# \u0026ldquo;Create From Usage\u0026rdquo; feature incredibly useful with TDD. This feature will be available in Visual Studio 2010. They are calling it “Consume-First Development”. R# has keyboard shortcuts for individual refactorings. All refactorings are accessible from ALT+ENTER or ALT+R. Again, R# helps you keep focused on the code you are writing. In CodeRush, individual refactorings don\u0026rsquo;t have keyboard shortcuts. R# allows me to specify exactly what to include when doing ExtractXXX refactorings. CodeRush doesn\u0026rsquo;t. R# seems to know what I want to do. For example, when I discover that an existing class would be a good starting point to write the class I am thinking about and copy-paste the class and attempt to rename it, CodeRush renames both classes. R# renames the one you intend to rename. R# introduces much less friction when running unit tests. It is possible to add unit-testing add-ins to Visual Studio and access similar functionality, but the way unit-testing is integrated into R#, it is much more conducive to TDD. Collapse a class region. Now try to do a refactoring on this class, like “Rename file to match type” etc. In CodeRush, you will not be able to do it because the three-dot glyph will not be displayed when the class is collapsed. CodeRush keeps getting in my way by automatically writing over as I type. It expands its “smart templates” when you press space. Guess what! That is how I separate words in my sentences - by pressing space. It gets quite annoying. I wish I could turn it off. As you have probably guessed by now, I think ReSharper is a better fit for me.\nHere is a list of some other comparisons, covering aspects and features of these products I haven’t mentioned here that might be important to you. Some of these concluded in favor of CodeRush. Keep in mind that some of the following articles are a couple of years old.\nDerik Whittaker is keeping CodeRush but uninstalled Refactor Pro. David Hayden is keeping an open mind. Scott Hanselman likes CodeRush better. Ryan Garagay went with R#. StackOverflow.com has some useful comments and more links. There is some discussion on JoelOnSoftware.com. Ian decided to stick with ReSharper. ","permalink":"https://www.tewari.info/2009/02/21/resharper-vs-coderush-refactor-pro/","summary":"\u003cp\u003eI have been playing with JetBrains \u003ca href=\"http://www.jetbrains.com/resharper/\"\u003eReSharper\u003c/a\u003e(version 4.1) and DevExpress \u003ca href=\"http://devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/\"\u003eCodeRush + Refactor! Pro\u003c/a\u003e (version 3.2.2) lately. I wanted to decide on which one to go with. Here are some notes -\u003c/p\u003e\n\u003cp\u003eR# = ReSharper\nCodeRush = CodeRush + Refactor! Pro\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eR# seems to be better for refactoring, because it does not assume that I follow a rigid work flow when writing code. For example, I don\u0026rsquo;t always decide on the class hierarchies upfront. I do discover them as I write code. So, when I discover that I need to extract a base class from the class I am working on, I can do so with R#. I couldn\u0026rsquo;t find a way to do extract a base/super class with CodeRush.\u003c/li\u003e\n\u003cli\u003eIn R#, I can create an overloaded constructor using \u0026ldquo;Change Signature\u0026rdquo; refactoring (Ctrl+R, S). I couldn\u0026rsquo;t find a way to do this in CodeRush. CodeRush does allow me to create overloaded methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHowever, comparisons that only focus on how many refactorings each tool can do are not very important to me. After all, it should be easy for the individual missing refactorings to be implemented in the subsequent releases of these tools. I want to know which one is a better investment in the long run. The investment is not just a couple of hundred dollars, it is going to be an investment of time too.\u003c/p\u003e","title":"ReSharper vs CodeRush + Refactor Pro"},{"content":"","permalink":"https://www.tewari.info/twitter/","summary":"","title":"ashtewari@twitter"},{"content":"DbUpdater (version 1.3 onwards) can be used with sqlite3.\nReview the files included in DbUpdater-sqlite3.zip\n1. DbUpdater.exe.config must be modified. Note changes to the following keys - exe-file, exe-args, dialect, driver_class, connetion_string. 2. SchemaVersion.hbm.xml must be modified. The \u0026lsquo;class\u0026rsquo; attributes value for the \u0026lsquo;generator\u0026rsquo; of \u0026lsquo;id\u0026rsquo; must be changed to \u0026lsquo;identity\u0026rsquo;. No other changes are needed here. 3. \\SqlScripts\\schema-version-table.sql is modified. Note that the datatypes of all columns are changed to TEXT, except for SchemaChangeId, which is changed to integer primary key. integer primary key is used for auto-incremented columns in sqlite. 4. \\SqlScripts\\baseline.sql is modified. Note the use of current_timestamp function. The actual sql syntax in this file must conform to sqlite dialect. 5. All other .sql scripts in \\SqlScripts directory are also modified to conform to sqlite dialect.\nThe following files are expected to be in DbUpdater.exe directory (as configured in the DbUpdater.exe.config file) -\n1. sqlite3.exe : download. 2. System.Data.SQLite.dll : download. 3. createdb.bat file : This file is included. This batch script will call sqlite3.exe to execute sql queries.\nAnother very useful tool for working with sqlite database files is SQLite Database Browzer. sqlite-support.html\n","permalink":"https://www.tewari.info/2008/09/09/using-nhibernate-with-sqlite-in-dbupdater/","summary":"\u003cp\u003e\u003ca href=\"/dbupdater/\"\u003eDbUpdater\u003c/a\u003e (\u003ca href=\"http://sourceforge.net/projects/dbupdater/\"\u003eversion 1.3\u003c/a\u003e onwards) can be used with \u003ca href=\"http://www.sqlite.org/\"\u003esqlite3\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eReview the files included in \u003ca href=\"/downloads/DbUpdater-sqlite3.zip\"\u003eDbUpdater-sqlite3.zip\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e1. DbUpdater.exe.config must be modified. Note changes to the following keys - exe-file, exe-args, dialect, driver_class, connetion_string.\n2. SchemaVersion.hbm.xml must be modified. The \u0026lsquo;class\u0026rsquo; attributes value for the \u0026lsquo;generator\u0026rsquo; of \u0026lsquo;id\u0026rsquo; must be changed to \u0026lsquo;identity\u0026rsquo;. No other changes are needed here.\n3. \\SqlScripts\\schema-version-table.sql is modified. Note that the datatypes of all columns are changed to TEXT, except for SchemaChangeId, which is changed to integer primary key. integer primary key is used for auto-incremented columns in sqlite.\n4. \\SqlScripts\\baseline.sql is modified. Note the use of current_timestamp function. The actual sql syntax in this file must conform to sqlite dialect.\n5. All other .sql scripts in \\SqlScripts directory are also modified to conform to sqlite dialect.\u003c/p\u003e","title":"Using NHibernate With SQLite in DbUpdater"},{"content":"By popular demand, DbUpdater is now up on the sourceforge. Latest download (v1.2) is now available from there.\n","permalink":"https://www.tewari.info/2008/07/27/dbupdater-on-sourceforge/","summary":"\u003cp\u003eBy popular demand, \u003ca href=\"/dbupdater/\" title=\"DbUpdater : Database Schema Version Control\"\u003eDbUpdater\u003c/a\u003e is now up on the \u003ca href=\"https://sourceforge.net/projects/dbupdater\" title=\"DbUpdater-on-SourceForge\"\u003esourceforge\u003c/a\u003e. Latest download (v1.2) is now available from \u003ca href=\"https://sourceforge.net/project/showfiles.php?group_id=232631\" title=\"DbUpdater-Download\"\u003ethere\u003c/a\u003e.\u003c/p\u003e","title":"DbUpdater on SourceForge"},{"content":"We have a position open for a 6 month internship in our group in Calabasas, CA. We do cutting edge Network Performance Analysis work. A candidate with C#/C++/C background on Windows/Linux is preferred. If you are interested, contact me. The position is available now.\n","permalink":"https://www.tewari.info/2008/06/18/internship-position-available/","summary":"\u003cp\u003eWe have a position open for a 6 month internship in our group in Calabasas, CA. We do cutting edge Network Performance Analysis work. A candidate with C#/C++/C background on Windows/Linux is preferred. If you are interested, \u003ca href=\"/contact-me/\" title=\"Contact-AshTewari\"\u003econtact me\u003c/a\u003e. The position is available now.\u003c/p\u003e","title":"Internship Position Available"},{"content":"I am not just being philosophical here. In WPF, ControlTemplates allow you to transform a control\u0026rsquo;s appearance. This is not the same as applying stylesheets. This is an entirely new level of customization. What you see in the screenshot below looks like a Dial but is actually a simple ProgressBar control wearing a \u0026ldquo;Dial\u0026rdquo; template. The Dial template was created using Microsoft Expression Blend .\nInclude the ControlTemplate as a Window.Resource and then assign it to ProgressBar element\u0026rsquo;s Template attribute :\nOf course that is not all. The ControlTemplate must define some named elements of FrameworkElement type. Charles Petzold has explained it in detail : MSDN Magazine Article. So, I will not repeat it here.\nThe sample code can be downloaded here : DialTest.zip License : Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.\n","permalink":"https://www.tewari.info/2008/06/10/dial-gauge-is-a-progressbar/","summary":"\u003cp\u003eI am not just being philosophical here. In \u003ca href=\"http://msdn.microsoft.com/en-us/netframework/aa663326.aspx\" title=\"MSDN-WPF\"\u003eWPF\u003c/a\u003e, \u003ca href=\"http://msdn.microsoft.com/en-us/magazine/cc163497.aspx\" title=\"Using Templates to Customize WPF Controls\"\u003eControlTemplates\u003c/a\u003e allow you to transform a control\u0026rsquo;s appearance. This is not the same as applying stylesheets. This is an entirely new level of customization. What you see in the screenshot below looks like a Dial but is actually a simple ProgressBar control wearing a \u0026ldquo;Dial\u0026rdquo; template. The Dial template was created using \u003ca href=\"http://www.microsoft.com/expression/products/Overview.aspx?key=blend\" title=\"Microsoft-Expression-Blend\"\u003eMicrosoft Expression Blend\u003c/a\u003e .\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"dial-is-a-progressbar.PNG\" loading=\"lazy\" src=\"/images/dial-is-a-progressbar.PNG\"\u003e\u003c/p\u003e\n\u003cp\u003eInclude the ControlTemplate as a Window.Resource and then assign it to ProgressBar element\u0026rsquo;s Template attribute :\u003c/p\u003e","title":"Dial Gauge is a ProgressBar"},{"content":"SharpDevelop3.0 uses MSBuild. Including PostSharp in your build process is transparent if you are doing a global install using PostSharp installer. If you are doing a per-project installation using \u0026ldquo;Binary - No Installer\u0026rdquo;download, you will need to import the PostSharp targets into your .csproj file -\nTrue C:\\code\\PostSharp-1.0.8.316-Binary\\ For more details, read the install instructions included in the PostSharp download and under-the-hood-of-msbuild-integration.\nTo use local PostSharp binaries (relative to your project) , modify your .csproj file as follows -\nTrue $(MSBuildProjectDirectory)\\PostSharp\\ $(MSBuildProjectDirectory) is the directory containing your .csproj file. \\PostSharp\\ is the directory containing local PostSharp binaries.\n2. You will need to exclude the Aspect class itself from being woven.\nIf you are following the getting-started sample, see the following example:\n[Serializable] [Trace( null, AttributeExclude = true )] public sealed class TraceAttribute : OnMethodBoundaryAspect { 3. Compile your project.\n","permalink":"https://www.tewari.info/2008/04/28/postsharp-with-sharpdevelop/","summary":"\u003cp\u003e\u003ca href=\"http://sharpdevelop.net/OpenSource/SD/Default.aspx\" title=\"SharpDevelop HomePage\"\u003eSharpDevelop3.0\u003c/a\u003e uses \u003ca href=\"http://en.wikipedia.org/wiki/MSBuild\" title=\"MSBuild on wikipedia\"\u003eMSBuild\u003c/a\u003e. Including PostSharp in your build process is transparent if you are doing a global install using PostSharp installer. If you are doing a per-project installation using \u0026ldquo;Binary - No Installer\u0026rdquo;\u003ca href=\"http://www.postsharp.org/download/\" title=\"postsharp download\"\u003edownload\u003c/a\u003e, you will need to import the PostSharp targets into your .csproj file -\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    True\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eC:\\code\\PostSharp-1.0.8.316-Binary\\\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eFor more details, read the install instructions included in the PostSharp \u003ca href=\"http://www.postsharp.org/download/\" title=\"postsharp download\"\u003edownload\u003c/a\u003e and \u003ca href=\"http://www.postsharp.org/blog/2008/01/under-hood-of-msbuild-integration.html\" title=\"under-hood-of-msbuild-integration\"\u003eunder-the-hood-of-msbuild-integration\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTo use local PostSharp binaries (relative to your project) , modify your .csproj file as follows -\u003c/p\u003e","title":"PostSharp with SharpDevelop"},{"content":"In my previous post : WPF-LINQ To SQL Sample, I had to resort to modifying .dbml file to get the images stored as varbinary into the WPF ListView control. I had to change the Type of image fields to System.Byte[], instead of using System.Data.Linq.Binary. A better way to do this is to use a custom converter. WPF allows you to specify custom converter as part of the Binding in .xaml, like this -\n\u0026lt;Image Grid.Row=\u0026#34;2\u0026#34; Source=\u0026#34;{Binding Path=ThumbNailPhoto , Converter={StaticResource imageConverter}}\u0026#34;\u0026gt;\u0026lt;/Image\u0026gt; The custom converter is declared in the same .xaml file as a resource -\n\u0026lt;Window.Resources\u0026gt; \u0026lt;local:ImageDataConverter x:Key=\u0026#34;imageConverter\u0026#34; /\u0026gt; \u0026lt;/Window.Resources\u0026gt; ImageDataConverter is implemented in .xaml.cs file -\npublic class ImageDataConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { byte[] image = ((System.Data.Linq.Binary)value).ToArray(); return image; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } } The updated sample code can be downloaded here : WPF-LINQ to SQL Sample License : Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.\n","permalink":"https://www.tewari.info/2008/04/15/using-custom-converter-in-xaml/","summary":"\u003cp\u003eIn my previous post : \u003ca href=\"/2008/03/07/wpf-linq-to-sql-sample/\" title=\"wpf-linq-to-sql-sample\"\u003eWPF-LINQ To SQL Sample\u003c/a\u003e, I had to resort to modifying .dbml file to get the images stored as varbinary into the WPF ListView control. I had to change the Type of image fields to System.Byte[], instead of using System.Data.Linq.Binary. A better way to do this is to use a custom converter. WPF allows you to specify custom converter as part of the Binding in .xaml, like this -\u003c/p\u003e","title":"Using Custom Converter in XAML"},{"content":"This exercise in binding a WPF ListView control with LINQ to SQL was a lot of fun ! The following image shows data from AdventureWorks sample database displayed in the ListView control. The end result is very admirable, even in this very basic demo. Feeling a complete sense of freedom is unavoidable when working with WPF.\nThis sample demonstrates :\nLINQ to SQL mapping. WPF ListView Control DataBinding. Displaying images stored in database as varbinary in WPF control. The sample code can be downloaded here : WPF-LINQ to SQL Sample License : Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License. ","permalink":"https://www.tewari.info/2008/03/07/wpf-linq-to-sql-sample/","summary":"\u003cp\u003eThis exercise in binding a WPF ListView control with LINQ to SQL was a lot of fun ! The following image shows data from \u003ca href=\"http://www.codeplex.com/MSFTDBProdSamples\" title=\"MSSQL Sample Databases\"\u003eAdventureWorks\u003c/a\u003e sample database displayed in the ListView control. The end result is very admirable, even in this very basic demo. Feeling a complete sense of freedom is unavoidable when working with WPF.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Linq2SqlSample1.Png\" loading=\"lazy\" src=\"/images/Linq2SqlSample1.Png\"\u003e\u003c/p\u003e\n\u003cp\u003eThis sample demonstrates :\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eLINQ to SQL mapping.\u003c/li\u003e\n\u003cli\u003eWPF ListView Control DataBinding.\u003c/li\u003e\n\u003cli\u003eDisplaying images stored in database as varbinary in WPF control.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe sample code can be downloaded here : \u003ca href=\"/downloads/Linq2SqlSample.zip\" title=\"Linq2SqlSample.zip\"\u003eWPF-LINQ to SQL Sample\u003c/a\u003e\nLicense : \u003ca href=\"http://creativecommons.org/licenses/by-nc-sa/3.0/us/\"\u003eCreative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.\u003c/a\u003e \u003ca href=\"http://creativecommons.org/licenses/by-nc-sa/3.0/us/\"\u003e\u003cimg alt=\"Creative Commons License\" loading=\"lazy\" src=\"http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"WPF - LINQ to SQL Sample"},{"content":"The default log4net output path is relative to the startup directory of your executable. To customize the output path, you can override the base Appender\u0026rsquo;s File property in your own Appender class. The following example describes how to route the log files relative to the temp folder :\npublic class MyOwnAppender : log4net.Appender.RollingFileAppender { public override string File { get { return base.File; } set { if (Path.IsPathRooted(value)) { base.File = value; } else { base.File = Path.Combine(Path.GetTempPath(), value); } } } } Your log4net config file must be modified so that log4net can locate and use your custom Appender. If MyOwnAppender is in MyNamespace and you have implemented it in MyLoggerLib.dll :\n","permalink":"https://www.tewari.info/2008/03/06/customize-log4net-output-path/","summary":"\u003cp\u003eThe default log4net output path is relative to the startup directory of your executable. To customize the output path, you can override the base Appender\u0026rsquo;s File property in your own Appender class. The following example describes how to route the log files relative to the temp folder :\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   public class MyOwnAppender : log4net.Appender.RollingFileAppender\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         public override string File\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e             get\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e             {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                 return base.File;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e             }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            set\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                if (Path.IsPathRooted(value))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    base.File = value;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                else\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    base.File = Path.Combine(Path.GetTempPath(), value);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYour log4net config file must be modified so that log4net can locate and use your custom Appender. If MyOwnAppender is in MyNamespace and you have implemented it in MyLoggerLib.dll :\u003c/p\u003e","title":"Customize log4net Output Path"},{"content":"","permalink":"https://www.tewari.info/opensimsim/","summary":"","title":"OpenSimSim"},{"content":"The value of any advice is tied to the degree of its relevance to your particular situation and circumstances. Very specific advice, like legal and medical advice, is very expensive. It is very relevant to the individual\u0026rsquo;s situation and therefore quite valuable. The degree of relevance of inexpensive/free advice to your specific circumstances is usually very low. Inexpensive/free advice, as in sayings and quotes, but also in everyday personal and business communication, is very generic. The same message is usually perceived differently by different people. Especially when the entire message is very succinct and pithy. Various aspects of the message are accentuated differently as it is filtered through individual perception.\nDeveloping a sense of how generic advice applies to your individual situation is invaluable. Experience, observation and reading feeds the awareness. Trying and learning from mistakes is essential. Applying the lessons completes the circle. One of the best career advice I ever got was from reading Spencer Johnson\u0026rsquo;s Who Moved My Cheese ? The message in this book is timeless. I had been through many significant changes in my life and I think I have handled those changes quite well. After reading this book in 2001, I became consciously aware of the existence of change and my own patterns of behavior and responses to events of change. This awareness has helped me anticipate change, prepare better, make better decisions and handle change more productively.\n","permalink":"https://www.tewari.info/2008/02/29/career-advice/","summary":"\u003cp\u003eThe value of any advice is tied to the degree of its relevance to your particular situation and circumstances. Very specific advice, like legal and medical advice, is very expensive. It is very relevant to the individual\u0026rsquo;s situation and therefore quite valuable. The degree of relevance of inexpensive/free advice to your specific circumstances is usually very low. Inexpensive/free advice, as in sayings and quotes, but also in everyday personal and business communication, is very generic. The same message is usually perceived differently by different people. Especially when the entire message is very succinct and pithy. Various aspects of the message are accentuated differently as it is filtered through individual perception.\u003c/p\u003e","title":"Career Advice"},{"content":"Version Aware Database Schema Deployment\nDownload : DbUpdater v 1.4 (License:GNU General Public License version 3 (GPLv3))\nCopyright © 2008 : Ash Tewari www.tewari.info\nDbUpdater is a free tool that helps you implement the database schema version control system described by K. Scott Allen in this set of articles :\nThree rules for database work The Baseline Change Scripts Views, Stored Procedures and the Like Branching and Merging Usage :\nFirst read the articles listed above. The file prefix for change scripts is \u0026ldquo;db\u0026rdquo;, by default. You can change it in the config file. DbUpdater supports the baseline script as well as post-scripts. Make sure the database you are going to put under version control is already created. Specify the connection string in the DbUpdater.exe.config file. Use the connection_string parameter. You can use %ServerName%, %DbName%, %UserName% and %Password% place-holders. You will specify the values for these in the commandline parameters of DbUpdater.exe. Make sure that the \u0026ldquo;exe-file\u0026rdquo; value in the config file is pointing to the program you want to use to execute sql scripts. Use \u0026ldquo;exe-args\u0026rdquo; value to specify commandline parameters for the program specified in \u0026ldquo;exe-file\u0026rdquo;. %SqlFile% placeholder will be used at runtime to pass the sql script file to the program. Here is a sample commandline to run DbUpdater - DbUpdater.exe SqlScripts /server:(local)\\SQLEXPRESS /db:TestDb /confirm:true.\u0026ldquo;SqlScripts\u0026rdquo; is the name of the folder where the change scripts are placed (relative to the current directory). To test drive the program create a database named \u0026ldquo;TestDb\u0026rdquo; in the \u0026ldquo;(local)\\SQLExpress\u0026rdquo; instance and use the included sample-command-line.bat to run DbUpdater. Review the contents of included \u0026ldquo;SqlScripts\u0026rdquo; folder. SQLite is now supported in DbUpdater (from version 1.3 onwards). See this post for details - using-nhibernate-with-sqlite-in-dbupdater .\nOther Resources : Evolutionary Database Design Bulletproff Sql Change Scripts Using INFORMATION_SCHEMA Views\n\u0026ndash; ","permalink":"https://www.tewari.info/dbupdater/","summary":"\u003cp\u003eVersion Aware Database Schema Deployment\u003c/p\u003e\n\u003cp\u003eDownload : \u003ca href=\"http://sourceforge.net/project/showfiles.php?group_id=232631\"\u003eDbUpdater v 1.4\u003c/a\u003e (\u003ca href=\"http://www.opensource.org/licenses/gpl-3.0.html\"\u003eLicense:GNU General Public License version 3 (GPLv3)\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eCopyright © 2008 : Ash Tewari\n\u003ca href=\"http://www.tewari.info\"\u003ewww.tewari.info\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eDbUpdater is a free tool that\nhelps you implement the database schema version control system\ndescribed by K. Scott Allen in this set of articles :\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://odetocode.com/Blogs/scott/archive/2008/01/30/11702.aspx\"\u003eThree rules for database work\u003c/a\u003e \u003ca href=\"http://odetocode.com/Blogs/scott/archive/2008/01/31/11710.aspx\"\u003eThe Baseline\u003c/a\u003e \u003ca href=\"http://odetocode.com/Blogs/scott/archive/2008/02/02/11721.aspx\"\u003eChange Scripts\u003c/a\u003e \u003ca href=\"http://odetocode.com/Blogs/scott/archive/2008/02/02/11737.aspx\"\u003eViews, Stored Procedures and the Like\u003c/a\u003e \u003ca href=\"http://odetocode.com/Blogs/scott/archive/2008/02/03/11746.aspx\"\u003eBranching and Merging\u003c/a\u003e Usage :\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eFirst read the articles listed above. The file prefix for change\nscripts is \u0026ldquo;db\u0026rdquo;, by default. You can change it in the config file.\nDbUpdater supports the baseline script as well as post-scripts.\u003c/li\u003e\n\u003cli\u003eMake sure the database you are going to put under version control is already created.\u003c/li\u003e\n\u003cli\u003eSpecify the connection string in the DbUpdater.exe.config file. Use the connection_string parameter.\u003c/li\u003e\n\u003cli\u003eYou can use %ServerName%, %DbName%, %UserName% and %Password%\nplace-holders. You will specify the values for these in the commandline\nparameters of DbUpdater.exe.\u003c/li\u003e\n\u003cli\u003eMake sure that the \u0026ldquo;exe-file\u0026rdquo; value in the config file is pointing to the program you want to use to execute sql scripts.\u003c/li\u003e\n\u003cli\u003eUse \u0026ldquo;exe-args\u0026rdquo; value to specify commandline parameters for the\nprogram specified in \u0026ldquo;exe-file\u0026rdquo;. %SqlFile% placeholder will be used at\nruntime to pass the sql script file to the program.\u003c/li\u003e\n\u003cli\u003eHere is a sample commandline to run DbUpdater - \u003cstrong\u003e\u003cem\u003eDbUpdater.exe SqlScripts /server:(local)\\SQLEXPRESS /db:TestDb /confirm:true.\u003c/em\u003e\u003c/strong\u003e\u0026ldquo;SqlScripts\u0026rdquo; is the name of the folder where the change scripts are placed (relative to the current directory).\u003c/li\u003e\n\u003cli\u003eTo test drive the program create a database named \u0026ldquo;TestDb\u0026rdquo; in the \u0026ldquo;(local)\\SQLExpress\u0026rdquo; instance and use the included sample-command-line.bat to run DbUpdater. Review the contents of included \u0026ldquo;SqlScripts\u0026rdquo; folder.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003ca href=\"http://www.sqlite.org\"\u003eSQLite\u003c/a\u003e is now supported in DbUpdater (from version 1.3 onwards). See this post for details - \u003ca href=\"/2008/09/09/using-nhibernate-with-sqlite-in-dbupdater/\" title=\"using-nhibernate-with-sqlite-in-dbupdater\"\u003eusing-nhibernate-with-sqlite-in-dbupdater\u003c/a\u003e .\u003c/p\u003e","title":"DbUpdater"},{"content":"","permalink":"https://www.tewari.info/contact-me/","summary":"","title":"Contact Me"},{"content":"It is essential to treat database schema as source code and apply all the norms and best practices applicable to it. From what I hear and read, database schema version control is non-existent in too many projects.\nVarious techniques to accomplish version control of database schemas have been discussed and published. Martin Fowler and Pramod Sadagale has written a comprehensive article on Evolutionary Database Design. It is a must-read for everyone involved with database development.\nK. Scott Allen writes in detail about an excellent system here - Versioning Databases - Change Scripts. This approach is sufficiently light-weight (for my taste) and provides complete control over the whole process.\nI am providing a free tool here that you can use to implement this system. It will even create the SchemaVersionsLog table for your database, if it doesn\u0026rsquo;t exist. If you are using this tool with MSSQL Server, you can get started with very little effort. If you are using a different DBMS, you can still use this tool. It uses NHibernate to access the SchemaVersionsLog table. So, any DBMS supported by NHibernate is acceptable, as long as it comes with a command line tool to execute the sql scripts.\nDownload DbUpdater here.\n","permalink":"https://www.tewari.info/2008/02/18/dbupdater-database-schema-version-control/","summary":"\u003cp\u003eIt is essential to treat database schema as source code and apply all the norms and best practices applicable to it. From what I hear and read, database schema version control is non-existent in too many projects.\u003c/p\u003e\n\u003cp\u003eVarious techniques to accomplish version control of database schemas have been discussed and published. Martin Fowler and Pramod Sadagale has written a comprehensive article on \u003ca href=\"http://martinfowler.com/articles/evodb.html\"\u003eEvolutionary Database Design\u003c/a\u003e. It is a must-read for everyone involved with database development.\u003c/p\u003e","title":"Database Schema Version Control Tool"},{"content":"I like printing blog posts and reading them later, but too many blogs don\u0026rsquo;t provide functionality to print well formatted posts. I end up printing sidebars, advertisements and other clutter along with the post, thanks to lousy print formatting in browsers. What a waste !\nIt is actually quite easy to add a \u0026ldquo;Print This Post\u0026rdquo; button to a WordPress blog. One great option (the one I use on this blog) is WP-Print. Make sure you read Installation and Usage instructions. Brilliant job !\nAnother option is HP Blog Printing. This works with some other blogging platforms also. I like the simplicity of WP-Print more than the feature set of HP plugin. HP also requires you to sign up.\nHow do you format posts for printing, when a blog doesn\u0026rsquo;t have such feature ?\n","permalink":"https://www.tewari.info/2008/01/24/printing-blog-posts/","summary":"\u003cp\u003eI like printing blog posts and reading them later, but too many blogs don\u0026rsquo;t provide functionality to print well formatted posts. I end up printing sidebars, advertisements and other clutter along with the post, thanks to lousy print formatting in browsers. What a waste !\u003c/p\u003e\n\u003cp\u003eIt is actually quite easy to add a \u0026ldquo;Print This Post\u0026rdquo; button to a \u003ca href=\"http://wordpress.org\" title=\"WordPress Site\"\u003eWordPress\u003c/a\u003e blog. One great option (the one I use on this blog) is \u003ca href=\"http://lesterchan.net/wordpress/readme/wp-print.html\" title=\"WP-Print download\"\u003eWP-Print\u003c/a\u003e. Make sure you read Installation and Usage instructions. Brilliant job !\u003c/p\u003e","title":"Printing Blog Posts"},{"content":"OpenSimSim : Your Password Solution. Download 1.0 Release Candidate here : OpenSimSim 1.0-RC\n","permalink":"https://www.tewari.info/2007/12/24/opensimsim-10-rc-is-out/","summary":"\u003cp\u003e\u003ca href=\"http://opensimsim.sourceforge.net\" title=\"OpenSimSim Website\"\u003eOpenSimSim\u003c/a\u003e : Your Password Solution. Download 1.0 Release Candidate here : \u003ca href=\"https://sourceforge.net/project/showfiles.php?group_id=194886\" title=\"OpenSimSim 1.0-RC\"\u003eOpenSimSim 1.0-RC\u003c/a\u003e\u003cimg alt=\"opensimsim-screenshot\" loading=\"lazy\" src=\"http://opensimsim.sourceforge.net/opensimsim-screenshot-1.png\"\u003e\u003c/p\u003e","title":"OpenSimSim 1.0-RC is out"},{"content":"XPATH axes come in very handy when nodes need to be selected based on (attribute\u0026rsquo;s or child element\u0026rsquo;s) values that must match those of other nodes elsewhere in the xml tree. Consider the following log4net configuration file :\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;configuration\u0026gt; \u0026lt;configSections\u0026gt; \u0026lt;section name=\u0026#34;nhibernate\u0026#34; type=\u0026#34;System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089\u0026#34; /\u0026gt; \u0026lt;section name=\u0026#34;log4net\u0026#34; type=\u0026#34;log4net.Config.Log4NetConfigurationSectionHandler,log4net\u0026#34; /\u0026gt; \u0026lt;/configSections\u0026gt; \u0026lt;nhibernate\u0026gt; \u0026lt;add key=\u0026#34;hibernate.connection.provider\u0026#34; value=\u0026#34;NHibernate.Connection.DriverConnectionProvider\u0026#34; /\u0026gt; \u0026lt;add key=\u0026#34;hibernate.connection.driver_class\u0026#34; value=\u0026#34;NHibernate.Driver.SqlClientDriver\u0026#34; /\u0026gt; \u0026lt;add key=\u0026#34;hibernate.connection.connection_string\u0026#34; value=\u0026#34;Server=servername; Database=dbname; User=username; Password=secret;\u0026#34; /\u0026gt; \u0026lt;add key=\u0026#34;hibernate.connection.isolation\u0026#34; value=\u0026#34;ReadCommitted\u0026#34; /\u0026gt; \u0026lt;add key=\u0026#34;hibernate.dialect\u0026#34; value=\u0026#34;NHibernate.Dialect.MsSql2000Dialect\u0026#34; /\u0026gt; \u0026lt;/nhibernate\u0026gt; \u0026lt;log4net\u0026gt; \u0026lt;appender name=\u0026#34;NHibernateFileLog\u0026#34; type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt; \u0026lt;file value=\u0026#34;Logs/nhibernate.txt\u0026#34; /\u0026gt; \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt; \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt; \u0026lt;maxSizeRollBackups value=\u0026#34;10\u0026#34; /\u0026gt; \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt; \u0026lt;staticLogFileName value=\u0026#34;true\u0026#34; /\u0026gt; \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt; \u0026lt;conversionPattern value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34; /\u0026gt; \u0026lt;/layout\u0026gt; \u0026lt;/appender\u0026gt; \u0026lt;appender name=\u0026#34;GeneralLog\u0026#34; type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt; \u0026lt;file value=\u0026#34;Logs/general.txt\u0026#34; /\u0026gt; \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt; \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt; \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt; \u0026lt;maxSizeRollBackups value=\u0026#34;5\u0026#34; /\u0026gt; \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt; \u0026lt;conversionPattern value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34; /\u0026gt; \u0026lt;/layout\u0026gt; \u0026lt;/appender\u0026gt; \u0026lt;appender name=\u0026#34;DataLog\u0026#34; type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt; \u0026lt;file value=\u0026#34;Logs/data.txt\u0026#34; /\u0026gt; \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt; \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt; \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt; \u0026lt;maxSizeRollBackups value=\u0026#34;5\u0026#34; /\u0026gt; \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt; \u0026lt;conversionPattern value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34; /\u0026gt; \u0026lt;/layout\u0026gt; \u0026lt;/appender\u0026gt; \u0026lt;!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --\u0026gt; \u0026lt;root\u0026gt; \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt; \u0026lt;appender-ref ref=\u0026#34;GeneralLog\u0026#34; /\u0026gt; \u0026lt;/root\u0026gt; \u0026lt;logger name=\u0026#34;NHibernate\u0026#34; additivity=\u0026#34;false\u0026#34;\u0026gt; \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt; \u0026lt;appender-ref ref=\u0026#34;NHibernateFileLog\u0026#34;/\u0026gt; \u0026lt;/logger\u0026gt; \u0026lt;logger name=\u0026#34;Pushable.Data\u0026#34; additivity=\u0026#34;false\u0026#34;\u0026gt; \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt; \u0026lt;appender-ref ref=\u0026#34;DataLog\u0026#34;/\u0026gt; \u0026lt;/logger\u0026gt; \u0026lt;/log4net\u0026gt; \u0026lt;/configuration\u0026gt; The s are referenced by s using \u0026lsquo;ref\u0026rsquo; attribute of their \u0026lsquo;appender-ref\u0026rsquo; child elements, using the same value as the \u0026rsquo;name\u0026rsquo; attribute of the . This type of linking is quite common in xml documents. Now, The first question is : How to list files that are referenced by s ? In order to solve this problem you will need to reach the s that are referenced by each and then extract the \u0026lsquo;value\u0026rsquo; of their s.\nSolution:\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;xsl:stylesheet xmlns:xsl=\u0026#34;http://www.w3.org/1999/XSL/Transform\u0026#34; version=\u0026#34;1.0\u0026#34;\u0026gt; \u0026lt;xsl:output method=\u0026#34;text\u0026#34;/\u0026gt; \u0026lt;xsl:strip-space elements=\u0026#34;*\u0026#34;/\u0026gt; \u0026lt;xsl:template match=\u0026#34;log4net\u0026#34;\u0026gt; \u0026lt;xsl:apply-templates select=\u0026#34;appender[@name=parent::log4net/logger/appender-ref/@ref]\u0026#34;/\u0026gt; \u0026lt;/xsl:template\u0026gt; \u0026lt;xsl:template match=\u0026#34;appender\u0026#34;\u0026gt; \u0026lt;xsl:value-of select=\u0026#34;file/@value\u0026#34;/\u0026gt; \u0026lt;xsl:text\u0026gt;\u0026amp;#10;\u0026lt;/xsl:text\u0026gt; \u0026lt;/xsl:template\u0026gt; \u0026lt;/xsl:stylesheet\u0026gt; The second question is : How to write an xslt script to transform this xml document into an html document with a table that looks like this -\nLogger File NHibernate Logs/nhibernate.txt Pushable.Data Logs/data.txt Solution:\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;xsl:stylesheet xmlns:xsl=\u0026#34;http://www.w3.org/1999/XSL/Transform\u0026#34; version=\u0026#34;1.0\u0026#34;\u0026gt; \u0026lt;xsl:output method=\u0026#34;html\u0026#34;/\u0026gt; \u0026lt;xsl:template match=\u0026#34;log4net\u0026#34;\u0026gt; \u0026lt;HTML\u0026gt; \u0026lt;HEAD\u0026gt; \u0026lt;TITLE\u0026gt;www.tewari.info : using xpath axes\u0026lt;/TITLE\u0026gt; \u0026lt;/HEAD\u0026gt; \u0026lt;BODY\u0026gt; \u0026lt;TABLE border=\u0026#34;1\u0026#34; width=\u0026#34;25%\u0026#34;\u0026gt; \u0026lt;TR\u0026gt;\u0026lt;TH\u0026gt;Logger\u0026lt;/TH\u0026gt;\u0026lt;TH\u0026gt;File\u0026lt;/TH\u0026gt;\u0026lt;/TR\u0026gt; \u0026lt;xsl:apply-templates select=\u0026#34;logger\u0026#34;/\u0026gt; \u0026lt;/TABLE\u0026gt; \u0026lt;/BODY\u0026gt; \u0026lt;/HTML\u0026gt; \u0026lt;/xsl:template\u0026gt; \u0026lt;xsl:template match=\u0026#34;logger\u0026#34;\u0026gt; \u0026lt;xsl:variable name=\u0026#34;aName\u0026#34; select=\u0026#34;appender-ref/@ref\u0026#34;/\u0026gt; \u0026lt;TR\u0026gt; \u0026lt;TD\u0026gt;\u0026lt;xsl:value-of select=\u0026#34;@name\u0026#34;/\u0026gt;\u0026lt;/TD\u0026gt; \u0026lt;TD\u0026gt;\u0026lt;xsl:value-of select=\u0026#34;parent::log4net/appender[@name=$aName]/file/@value\u0026#34;/\u0026gt;\u0026lt;/TD\u0026gt; \u0026lt;/TR\u0026gt; \u0026lt;/xsl:template\u0026gt; \u0026lt;/xsl:stylesheet\u0026gt; Credits :\nxml document from hibernate\nxml converted to html using Highlight\nSketchPath is a brilliant tool to play with xpath. I love the \u0026ldquo;New Context\u0026rdquo; button : Click on a node and hit \u0026ldquo;New Context\u0026rdquo; to change the context for the xpath query processor !\n","permalink":"https://www.tewari.info/2007/12/20/leveraging-xpath-axes/","summary":"\u003cp\u003eXPATH axes come in very handy when nodes need to be selected based on (attribute\u0026rsquo;s or child element\u0026rsquo;s) values that must match those of other nodes elsewhere in the xml tree. Consider the following log4net configuration file :\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;configuration\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;configSections\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;section name=\u0026#34;nhibernate\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            type=\u0026#34;System.Configuration.NameValueSectionHandler, System,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            Version=2.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;section name=\u0026#34;log4net\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            type=\u0026#34;log4net.Config.Log4NetConfigurationSectionHandler,log4net\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;/configSections\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;nhibernate\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;add key=\u0026#34;hibernate.connection.provider\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            value=\u0026#34;NHibernate.Connection.DriverConnectionProvider\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;add key=\u0026#34;hibernate.connection.driver_class\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            value=\u0026#34;NHibernate.Driver.SqlClientDriver\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;add key=\u0026#34;hibernate.connection.connection_string\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            value=\u0026#34;Server=servername; Database=dbname;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            User=username; Password=secret;\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;add key=\u0026#34;hibernate.connection.isolation\u0026#34; value=\u0026#34;ReadCommitted\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;add key=\u0026#34;hibernate.dialect\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            value=\u0026#34;NHibernate.Dialect.MsSql2000Dialect\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;/nhibernate\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;log4net\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;appender name=\u0026#34;NHibernateFileLog\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;file value=\u0026#34;Logs/nhibernate.txt\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maxSizeRollBackups value=\u0026#34;10\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;staticLogFileName value=\u0026#34;true\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u0026lt;conversionPattern\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34;  /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;/layout\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/appender\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;appender name=\u0026#34;GeneralLog\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;file value=\u0026#34;Logs/general.txt\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maxSizeRollBackups value=\u0026#34;5\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u0026lt;conversionPattern\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34;  /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;/layout\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/appender\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;appender name=\u0026#34;DataLog\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            type=\u0026#34;log4net.Appender.RollingFileAppender\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;file value=\u0026#34;Logs/data.txt\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appendToFile value=\u0026#34;true\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maximumFileSize value=\u0026#34;100KB\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;rollingStyle value=\u0026#34;Size\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;maxSizeRollBackups value=\u0026#34;5\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;layout type=\u0026#34;log4net.Layout.PatternLayout\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u0026lt;conversionPattern\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                value=\u0026#34;%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n\u0026#34;  /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;/layout\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/appender\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;root\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appender-ref ref=\u0026#34;GeneralLog\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/root\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;logger name=\u0026#34;NHibernate\u0026#34; additivity=\u0026#34;false\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appender-ref ref=\u0026#34;NHibernateFileLog\u0026#34;/\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/logger\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;logger name=\u0026#34;Pushable.Data\u0026#34; additivity=\u0026#34;false\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;level value=\u0026#34;DEBUG\u0026#34;/\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u0026lt;appender-ref ref=\u0026#34;DataLog\u0026#34;/\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u0026lt;/logger\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;/log4net\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;/configuration\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003cp\u003eThe \u003cappender\u003es are referenced by \u003clogger\u003es using \u0026lsquo;ref\u0026rsquo; attribute of their \u0026lsquo;appender-ref\u0026rsquo; child elements, using the same value as the \u0026rsquo;name\u0026rsquo; attribute of the \u003cappender\u003e. This type of linking is quite common in xml documents. Now, The first question is : How to list files that are referenced by \u003clogger\u003es ?\nIn order to solve this problem you will need to reach the \u003cappender\u003es that are referenced by each \u003clogger\u003e and then extract the \u0026lsquo;value\u0026rsquo; of their \u003cfile\u003es.\u003c/p\u003e","title":"Leveraging XPATH Axes"},{"content":"My name is Ash Tewari. I am a Senior Microsoft Certified .NET Solutions Developer with over 15 years of experience. I have created applications, frameworks and components encompassing desktop, web clients, middleware and databases.\nI use emerging Mobile, Desktop, Data, Cross-Platform Mobile and Cloud technologies (XAML/C#, HTML/Javascript, Windows Azure and Xamarin) to enable efficient workflows and improved business processes.\nI offer hands-on software development and technical leadership with experience in leading and mentoring members in distributed teams and ownership of all aspects of the development process with a track record of on-time delivery with focus on quality, maintainability and testability.\nI enjoy interacting with the members of software development community and very interested in sharing perspectives and insights with others. In my free time, I like to experiment with new tools, techniques, technologies and concepts.\nThe Views expressed on this site are my own and don\u0026rsquo;t necessarily reflect the views of my employer or client(s).\nI would love to hear from you :\n","permalink":"https://www.tewari.info/about-ash-tewari/","summary":"\u003cp\u003eMy name is Ash Tewari. I am a Senior Microsoft Certified .NET Solutions Developer with over 15 years of experience. I have created applications, frameworks and components encompassing desktop, web clients, middleware and databases.\u003c/p\u003e\n\u003cp\u003eI use emerging Mobile, Desktop, Data, Cross-Platform Mobile and Cloud technologies (XAML/C#, HTML/Javascript, Windows Azure and Xamarin) to enable efficient workflows and improved business processes.\u003c/p\u003e\n\u003cp\u003eI offer hands-on software development and technical leadership with experience in leading and mentoring members in distributed teams and ownership of all aspects of the development process with a track record of on-time delivery with focus on quality, maintainability and testability.\u003c/p\u003e","title":"About"}]