text:
Wednesday, January 25, 2017
Six years ago I started working furiously on this little side project about package management for Windows. It started to grow and over time it became clear that it was going to be something important. A community flourished and there was a tremendous uptake for this little tool.
Fast forward to present, starting soon I will be focused solely on Chocolatey as the Founder of Chocolatey Software, Inc*! It's an exciting opportunity to really see where we can take this Windows software management thing!
I also could not have had the opportunity to move forward without the support of a tremendous community, who has contributed to Chocolatey's success in many ways. Your support does not go unnoticed - we will continue to make open source improvements, along with ensuring that organizations can take Chocolatey to the next level with Chocolatey for Business.
It's a bit bittersweet as I've had the opportunity work with a lot of fantastic folks at Puppet and do some really awesome things for furthering automation on Windows. In many ways Puppet has been an amazing place to work (I highly recommend it, they have the remote employee situation handled). However, an opportunity to follow my first love, Chocolatey, is a dream I won't pass up.
Not everyone gets the opportunity to follow their dreams, so when you get a chance it can be both a thrilling and scary experience! Here's to the future of Chocolatey and Windows automation!
* - For those keeping track - Chocolatey Software was formed in November 2016 as a spin off of RealDimensions Software, LLC
Posted On Wednesday, January 25, 2017 2:43 AM | Comments (0) |
Filed Under [
Friday, April 22, 2016
This is a very exciting time for Chocolatey! Over the past 5 years, there have been some amazing points in Chocolatey's history. Now we are less than 10 days from another historical moment for Chocolatey - when licensed editions become available for purchase! This is the moment when we are able to offer features that enable businesses to better manage software through Chocolatey and offer non-free features to our community! This also marks when the community (and organizations) take the next step to ensure the longevity of Chocolatey for the next 10-20 years. I started this process with a dream and a Kickstarter and now it's finally coming to fruition!
Posted On Friday, April 22, 2016 11:43 PM | Comments (1) |
Filed Under [
Tuesday, April 19, 2016
Posted On Tuesday, April 19, 2016 5:56 PM | Comments (1) |
Filed Under [
Thursday, March 31, 2016
Microsoft announced the most amazing thing at //build/ yesterday, Bash on Windows 10. Not some sort of VM or container, but running native ELF binaries on Windows under an Ubuntu subsystem. Let me say that again slowly. Windows running native Linux binaries. Not recompiled. Go read http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html, I'll wait. :)
Linux geeks can think of it sort of the inverse of "wine" -- Ubuntu binaries running natively in Windows. Microsoft calls it their "Windows Subsystem for Linux" –Dustin Kirkland
Linux geeks can think of it sort of the inverse of "wine" -- Ubuntu binaries running natively in Windows. Microsoft calls it their "Windows Subsystem for Linux" –Dustin Kirkland
In case you missed the announcement, head to https://channel9.msdn.com/Events/Build/2016/KEY01 and fast forward to 48:15.
Almost immediately folks started asking what this means for Chocolatey. It's a great question. Here's the low down. This is fantastic for Chocolatey! You now have a fantastic way to get Unix apps and utilities with dpkg/apt in addition to great Windows apps and software with choco. More developers are going to be using the terminal to do things. It means more users of both apt and choco. More productivity for Windows users and developers. Think about that for a second. On no other platform will you have this ability. It's an exciting time to be in Windows!
What you can expect to see is more collaboration between choco and apt if they can communicate. Just like you can work with choco install -–source windowsfeatures (back in the latest 0.9.10 betas!), expect to see choco install rsync -–source apt. https://github.com/chocolatey/choco/issues/678
Coming up soon you are going to see what's coming in the next version of Chocolatey and why it is going to amaze you as another big leap in package management for Windows!
Here's a preview with PowerShell tab completion and updating path (environment variables) without needing to restart PowerShell (https://raw.githubusercontent.com/wiki/chocolatey/choco/images/gifs/choco_install.gif if the image doesn't show):
Posted On Thursday, March 31, 2016 5:05 PM | Comments (1) |
Filed Under [
Monday, March 28, 2016
Chocolatey turned 5 years old recently! I committed the first lines of Chocolatey code on March 22, 2011. At that time I never imagined that Chocolatey would grow into a flourishing community and a tool that is widely used by individuals and organizations to help automate the wild world of Windows software. It's come a long way since I first showed off early versions of Chocolatey to some friends for feedback. Over the last 2 years things have really taken off!
The number of downloads has really increased year over year!
Note: While not a completely accurate representation of usage and popularity, the number of downloads gives a pretty good context. Going up by 7 million and then by almost 30 million downloads in one year really shows a trend.
Note: The Chocolatey package has about 1,000 downloads per hour. I shut off the statistics for the install script back in October 2015 due to the extreme load on the site, so the number of Chocolatey package downloads is missing some of the statistics.
Let's take a little stroll through some of the interesting parts of Chocolatey's history. The history of Chocolatey really starts when I joined the Nubular (Nu) team in summer 2010.
This doesn't represent everything that has happened. I tried to list out and attribute everything I could find and remember. There have been so many amazing package maintainers over the years, there are too many of you to possibly list. You know who you are. You have made the community what it is today and have been instrumental in shaping enhancements in Chocolatey.
The community has been amazing in helping Chocolatey grow and showing that there is a need that it fills. Package maintainers have put in countless and sometimes thankless hours to ensure community growth and consumers have really found the framework useful! Thank you so much! The next version of Chocolatey is coming and it is going to be amazing. Here's to the next 5 years, may we change the world of Windows forever!
Posted On Monday, March 28, 2016 10:56 AM | Comments (1) |
Filed Under [
Saturday, January 16, 2016
Average approval time for moderated packages is currently under 10 hours!
We've found that with all of this automation in place, the moderation backlog was quickly reduced and will continue to be manageable. A visual comparison:
December 18, 2015 – 1630 packages ready for a moderator
January 16, 2016 – 7 packages ready for a maintainer
Note the improvements all around! The most important numbers to key in on are the first 3, they represent a waiting for reviewer to do something status. With the validator and verifier in place, moderation is much faster and more accurate, and the validator has increased package quality all around with its review! The waiting for maintainer (927 in the picture above) represents the bulk of the total number of packages under moderation currently. These are packages that require an action on the part of the maintainer to actively move the package to approved. This is also where the clean up service comes in. The cleaner sent 800+ reminders two days ago. If there is no response by early February on those packages, the waiting for maintainer status will drop significantly as those packages will automatically be rejected. Some of those packages have been waiting for maintainer action for over a year and are likely abandoned. If you are a maintainer and you have not been getting emails from the site, you should log in now and make sure your email address is receiving emails and that the messages are not going to your spam folder. A rejected package version is reversible, the moderators can put it back to submitted at any time when a maintainer is ready to work on moving the package towards approval again.
Posted On Saturday, January 16, 2016 8:34 AM | Comments (0) |
Filed Under [
Friday, December 18, 2015
tl;dr: Everything on https://chocolatey.org/notice is coming to fruition! We've automatically tested over 6,500 packages, a validator service is coming up now to check quality and the unreviewed backlog has been reduced by 1,000 packages! We sincerely hope that the current maintainers who have been waiting weeks and months to get something reviewed can be understanding that we've dug ourselves into a moderation mess and are currently finding our way out of this situation.
We've added a few things to Chocolatey.org (the community feed) to help speed up review times for package maintainers. A little over a year ago we introduced moderation for all new package versions (besides trusted packages) and from the user perspective it has been a fantastic addition. The usage has went up by over 20 million packages installed in one year versus just 5 million the 3 years before it! It's been an overwhelming response for the user community. Let me say that again for effect: Chocolatey's usage of community packages has increased 400% in one year over the prior three years combined!
But let's be honest, we've nearly failed in another area. Keeping the moderation backlog low. We introduced moderation as a security measure for Chocolatey's community feed because it was necessary, but we introduced it too early. We didn't have the infrastructure automation in place to handle the sheer load of packages that were suddenly thrown at us. And once we put moderation in place, more folks wanted to use Chocolatey so it suddenly became much more popular. And because we have automation surrounding updating and pushing packages (namely automatic packages), we had some folks who would submit 50+ packages at a time. With one particular maintainer submitting 200 packages automatically, and a review of each of them taking somewhere between 2-10 minutes, you don't have to be a detective to understand how this is going to become a consternation. And from the backlog you can see it really hasn't worked out well.
The most important number to understand here is the number in the submitted (underlined). This is the number of packages where a moderator has not yet looked at a package. A goal is to keep this well under 100. We want that time from a high quality package getting submitted to approved within 1-2 days.
Moderation has up until recently been a very manual process. Sometimes depending on which moderator that looked at your package determined whether it was going to be held in review for various reasons. We've added moderators and we've added more guidance around moderation to help bring a more structured review process. But it's not enough.
Some of you may not know this, but our moderators are volunteers and we currently lack full-time employees to help fix many of the underlying issues. Even considering that we've also needed to work towards Kickstarter delivery and the Chocolatey rewrite (making choco better for the long term), it's still not the greatest news to know that it has taken a long time to fix moderation, but hopefully it brings some understanding. Our goal is to eventually bring on full-time employees but we are not there yet. The Kickstarter was a start, but it was just that. A kick start. A few members of the core team who are also moderators have focused on ensuring the Kickstarter turns into a model that can ensure the longevity of Chocolatey. It may have felt that we have been ignoring the needs of the community, but that has not been our intention at all. It's just been really busy and we needed to address multiple areas surrounding Chocolatey with a small number of volunteers.
All moderation review communication is done on the package page. Now all review is done on the website, which means that there is no email back and forth (the older process) and what looks like one-sided communication on the site. This is a significant improvement.
Package review logging. Now you can see right from the discussion when and who submits package, when statuses change and where the conversation is.
More moderators. A question that comes up quite a bit surrounds the number of moderators that we have and adding more. We have added more moderators. We are up to 12 moderators for the site. Moderators are chosen based on building trust, usually through being extremely familiar with Chocolatey packaging and what is expected of approved packages. Learning what is expected usually comes through having your own packages approved and having a few packages. We've written most of this up at https://github.com/chocolatey/choco/wiki/Moderation.
Maintainers can self-reject packages that no longer apply. Say your package has a download url for the software that is always the same. You have some older package versions that could take advantage of being purged out of the queue since they are no longer applicable.
The package validation service (the validator). The validator checks the quality of a package based on requirements, guidelines and suggestions for creating packages for Chocolatey's community feed. Many of the validation items will automatically roll back into choco and will be displayed when packaging a package. We like to think of the validator as unit testing. It is validating that everything is as it should be and meets the minimum requirements for a package on the community feed.
The package verifier service (the verifier). The verifier checks the correctness (that the package actually works), that it installs and uninstalls correctly, has the right dependencies to ensure it is installed properly and can be installed silently. The verifier runs against both submitted packages and existing packages (checking every two weeks that a package can still install and sending notice when it fails). We like to think of the verifier as integration testing. It's testing all the parts and ensuring everything is good. On the site, you can see the current status of a package based on a little colored ball next to the title. If the ball is green or red, the ball is a link to the results (only on the package page, not in the list screen).
Coming Soon - Moderators will be automatically be assigned to backlog items. Once a package passes both validation and verification, a moderator is automatically assigned to review the package. Once the backlog is in a manageable state, this will be added.
Many maintainers come in to help out at different times in their lives and they do it nearly always as volunteers. Sometimes it is the tools they are using at the current time and sometimes it has to do with where they work. Over time folks' preferences/workplaces change and so maintainers drift away from keeping packages up to date because they have no internal incentive to continue to maintain those packages. It's a natural human response. I've been thinking about ways to reduce maintainer drift for the last three years and I keep coming back to the idea that consumers of those packages could come along and provide a one time or weekly tip to the maintainer(s) as a thank you for keeping package(s) updated. We are talking to Gratipay now - https://github.com/gratipay/inside.gratipay.com/issues/441 This, in addition to a reputation system, I feel will go a long way to help reduce maintainer drift.
Package moderation review time is down to mere seconds as opposed to minutes like before. This will allow a moderator to review and approve package versions much more quickly and will reduce our backlog and keep it lower.
It's already working! The number in the unreviewed backlog are down by 1,000 from the month prior. This is because a moderator doesn't have to wait until a proper time when they can have a machine up and ready for testing and in the right state. Now packages can be reviewed faster. This is only with the verifier in place, sheerly testing package installs. The validator expects to cut that down to near seconds of review time. The total number of packages in the moderation backlog have also been reduced, but honestly I only usually pay attention to the unreviewed backlog number as it is the most important metric for me.
The verifier has rolled through over 6,500 verifications to date! https://gist.github.com/choco-bot/
We sincerely hope that the current maintainers who have been waiting weeks and months to get something reviewed can be understanding that we've dug ourselves into a moderation mess and are currently finding our way out of this situation. We may have some required findings and will ask for those things to be fixed, but for anything that doesn't have required findings, we will approve them as we get to them.
Posted On Friday, December 18, 2015 9:32 AM | Comments (0) |
Filed Under [
Friday, November 14, 2014
"Don't worry about people stealing your ideas. If your ideas are any good, you'll have to ram them down people's throats." – Howard H. Aiken
"Don't worry about people stealing your ideas. If your ideas are any good, you'll have to ram them down people's throats." – Howard H. Aiken
Look around today. There is so much that you can do on Windows with respect to automation that just wasn't possible a few short years ago. It's hard to see what has changed because our memories are sometimes so short about how it used to be, so let's go back about 4 years ago to 2010. PowerShell was still young, there was no Chocolatey, and things like Puppet and Chef didn't work on Windows yet.
Folks were leaving Windows left and right once they got a taste of how easy automation was in other OS platforms. Well versed folks. Loud folks. Folks that were at the top of their game heading out of Windows. Many others have considered it. You've all heard the "leaving .NET stories" from some of the best developers on the .NET platform. But what you may not have realized is that these folks were not just leaving .NET, they were leaving Windows entirely. Some of this was in part to limitations they were finding that just were not there in other OSes. What you are also missing are all the folks that were silently leaving. For every one person speaking out about it, there were many more of the silent losses. The system admins, fed up with GUIs and lack of automation, leaving for greener pastures. The developers who didn't blog leaving the platform.
But a change has occurred more recently that has slowed that process. I believe it is better tools and automation of the Windows platform. Some people have shown such a passion that they've saved Windows as a platform for future generations.
PowerShell – Arguably this could be seen as the catalyst that started it all. It came out in 2006 and while v1 was somewhat limited, v2 (Oct 2009) added huge improvements, including performance. PowerShell is prevalent now, but it had humble beginnings. When Jeffrey Snover saw a need for better automation in Windows, no one understood what he was trying to do. Most folks at Microsoft kept asking, why do you need that? But Jeffrey had such a passion for what was needed that he took a demotion to make it happen. And we are thankful for that because it shaped the face of Windows automation for all. Jeffrey's passion brought us PowerShell, and it is continuing to bring us more things that have come out of his original Monad Manifesto from 2002.
Chocolatey – In 2011 Chocolatey furthered the automation story of Windows with package management, something that other platforms have enjoyed for years. Rob Reynolds' goals for Chocolatey in the beginning were simply to solve a need but it has since grown into so much more and is now making improvements to become a true package manager. It wasn't the first approach to package management on Windows and it is certainly not the last. But it did many things right, it didn't try to achieve lofty goals. It started working at the point of the native installers and official distribution points with a simple approach to packaging and very good helpers to achieve many abilities. When Rob first started working on it, most of his longtime technical friends questioned the relevance of it. Rob did not stop because he had a vision, a passion for making things happen. As his vision has been realized by many he is about to change the face of package management on Windows forever.
Puppet (and other CM tools) – In 2011 Puppet started working on Windows thanks to Josh Cooper. He single-handedly brought Puppet's excellent desired state configuration management to Windows (Chef also brought Windows support in 2011). Josh saw a need and convinced folks to try an experiment. That experiment has grown and has brought the last bits of what was needed to save Windows as a platform. His passion for bringing Puppet to Windows has grown into so much more than what it originally started out to do. And now it is arguably the best CM tool for any platform, as the Puppet Labs CEO stated at PuppetConf 2014, Puppet is becoming the lingua franca of infrastructure configuration.
All of this passion for automation has really changed Microsoft. They have adopted automation as a strategy. They are moving to a model of openness, recently announcing that the entire .NET platform is going to be Open Source. They are getting behind Chocolatey with OneGet and getting it built into Windows. They announced PowerShell DSC last year and have made huge improvements in it since then. From where we are sitting, it appears Microsoft now gets it. The effects of passion have really turned the company around and has saved Windows. Windows is becoming the platform we all hoped it would be, it's really bringing many folks to see it as a true platform for automation and that makes Windows a formidable platform for the foreseeable future.
Posted On Friday, November 14, 2014 8:42 AM | Comments (2) |
Saturday, November 8, 2014
Recently I talked to Herding Code about the kickstarter, package moderation, OneGet, and where we are going with Chocolatey.
Listen now - http://herdingcode.com/herding-code-199-rob-reynolds-on-the-chocolatey-kickstarter-chocolatey-growth-and-oneget/
Posted On Saturday, November 8, 2014 12:15 PM | Comments (0) |
Filed Under [
Monday, October 27, 2014
Well just after three years of having https://chocolatey.org, we've finally implemented package moderation. It's actually quite a huge step forward. This means that when packages are submitted, they will be reviewed and signed off by a moderator before they are allowed to show up and be used by the general public.
Existing packages that have not been moderated yet will have a warning posted on the package page that looks like
Packages that have been moderated will have a nice message on the package page that looks like
If the package is rejected, the maintainer will see a message, but no one else will see or be able to install the package.
You should also keep the following in mind:
We are making investments into the long term viability of Chocolatey. These improvements we are making are showing you that your support of the Chocolatey Kickstarter and the future of Chocolatey is a real thing. If you haven't heard about the kickstarter yet, take a look at https://www.kickstarter.com/projects/ferventcoder/chocolatey-the-alternative-windows-store-like-yum.
Posted On Monday, October 27, 2014 12:30 AM | Comments (0) |
Filed Under [
Friday, October 17, 2014
I'm really excited to tell you about The Chocolatey Experience! We are taking Chocolatey to the next level and ensuring the longevity of the platform. But we can't get there without your help! Please help me support Chocolatey and all of the improvements we need to make!
Posted On Friday, October 17, 2014 8:53 AM | Comments (0) |
Filed Under [
Saturday, September 27, 2014
Chocolatey has some big changes coming in the next few months, so we've started a newsletter to keep everyone informed of what's coming. The folks who are signed up for the newsletter will hear about the latest and greatest changes coming for Chocolatey first, plus they will know when the Kickstarter (Yes! Big changes are coming!) kicks off before anyone else. Sign up for the newsletter now to learn about all the exciting things coming down the pipe for Chocolatey!
Posted On Saturday, September 27, 2014 11:28 AM | Comments (0) |
Filed Under [
Thursday, August 7, 2014
Now that we've talked a little about Puppet. Let's see how easy it is to get started.
Let's get Puppet Installed. There are two ways to do that:
choco install puppet
choco install wincommandpaste
puppet resource user
user { 'Administrator':
ensure => 'present',
comment => 'Built-in account for administering the computer/domain',
groups => ['Administrators'],
uid => 'S-1-5-21-some-numbers-yo-500',
puppet apply -e "user {'bobbytables_123': ensure => present, groups => ['Users'], }"
Notice: /Stage[main]/Main/User[bobbytables_123]/ensure: created
puppet apply -e "user {'bobbytables_123': ensure => absent, }"
Notice: /Stage[main]/Main/User[bobbytables_123]/ensure: removed
You just did some configuration management /system administration. Welcome to the new world of awesome! Puppet is super easy to get started with. This is a taste so you can start seeing the power of automation and where you can go with it. We haven't talked about resources, manifests (scripts), best practices and all of that yet.
Next we are going to start to get into more extensive things with Puppet. Next time we'll walk through getting a Vagrant environment up and running. That way we can do some crazier stuff and when we are done, we can just clean it up quickly.
Posted On Thursday, August 7, 2014 10:39 AM | Comments (0) |
Filed Under [
Puppet was one of the first configuration management (CM) tools to support Windows, way back in 2011. It has the heaviest investment on Windows infrastructure with 1/3 of the platform client development staff being Windows folks. It appears that Microsoft believed an end state configuration tool like Puppet was the way forward, so much so that they cloned Puppet's DSL (domain-specific language) in many ways and are calling it PowerShell DSC.
Puppet Labs is pushing the envelope on Windows. Here are several things to note:
It can be overwhelming learning a new tool like Puppet at first, but Puppet Labs has some resources to help you on that path. Take a look at the Learning VM, which has a quest-based learning tool. For real-time questions, feel free to drop onto #puppet on freenode.net (yes, some folks still use IRC) with questions, and #puppet-dev with thoughts/feedback on the language itself. You can subscribe to puppet-users / puppet-dev mailing lists. There is also ask.puppetlabs.com for questions and Server Fault if you want to go to a Stack Exchange site. There are books written on learning Puppet. There are even Puppet User Groups (PUGs) and other community resources!
Puppet does take some time to learn, but with anything you need to learn, you need to weigh the benefits versus the ramp up time. I learned NHibernate once, it had a very high ramp time back then but was the only game on the street. Puppet's ramp up time is considerably less than that. The advantage is that you are learning a DSL, and it can apply to multiple platforms (Linux, Windows, OS X, etc.) with the same Puppet resource constructs.
As you learn Puppet you may wonder why it has a DSL instead of just leveraging the language of Ruby (or maybe this is one of those things that keeps you up wondering at night). I like the DSL over a small layer on top of Ruby. It allows the Puppet language to be portable and go more places. It makes you think about the end state of what you want to achieve in a declarative sense instead of in an imperative sense.
You may also find that right now Puppet doesn't run manifests (scripts) in order of the way resources are specified. This is the number one learning point for most folks. As a long time consternation of some folks about Puppet, manifest ordering was not possible in the past. In fact it might be why some other CMs exist! As of 3.3.0, Puppet can do manifest ordering, and it will be the default in Puppet 4. http://puppetlabs.com/blog/introducing-manifest-ordered-resources
You may have caught earlier that I mentioned PowerShell DSC. But what about DSC? Shouldn't that be what Windows users want to choose? Other CMs are integrating with DSC, will Puppet follow suit and integrate with DSC? The biggest concern that I have with DSC is it's lack of visibility in fine-grained reporting of changes (which Puppet has). The other is that it is a very young Microsoft product (pre version 3, you know what they say :) ). I tried getting it working in December and ran into some issues. I'm hoping that newer releases are there that actually work, it does have some promising capabilities, it just doesn't quite come up to the standard of something that should be used in production. In contrast Puppet is almost a ten year old language with an active community! It's very stable, and when trusting your business to configuration management, you want something that has been around awhile and has been proven. Give DSC another couple of releases and you might see more folks integrating with it. That said there may be a future with DSC integration. Portability and fine-grained reporting of configuration changes are reasons to take a closer look at Puppet on Windows.
Yes, Puppet on Windows is here to stay and it's continually getting better folks.
Posted On Thursday, August 7, 2014 9:21 AM | Comments (0) |
Filed Under [
Wednesday, July 9, 2014
Access Control Lists and permissions can get inherently complex. We didn't want to sacrifice a sufficiently advanced administrator/developer/etc from being able to get to advanced scenarios with ACLs with Puppet's ACL module. With the ACL module (soon to be) out in the wild, it may be helpful to explain one of the significantly advanced features of the ACL module: mask specific rights. I am going to interchangeably use the term "acl" to mean the module during the rest of this post (and not the Access control list or discretionary access control list).
Say you need very granular rights, not just RX (read, execute), but also to read and write attributes. You get read attributes (FILE_READ_ATTRIBUTES) with read (FILE_GENERIC_READ), see http://msdn.microsoft.com/en-us/library/windows/desktop/aa364399(v=vs.85).aspx. ACL provides you with the ability to specify 'full','modify','write','read','execute' or 'mask_specific'. Mask specific is when you can't get the specific rights you need for an identity (trustee, group, etc.) and need to get more specific.
Let's take a look at what mask specific looks like:
acl { 'c:/tempperms':
permissions => [
{ identity => 'Administrators', rights => ['full'] }, #full is same as - 2032127 aka 0x1f01ff but you should use 'full'
{ identity => 'SYSTEM', rights => ['modify'] }, #modify is same as 1245631 aka 0x1301bf but you should use 'modify'
{ identity => 'Users', rights => ['mask_specific'], mask => '1180073' }, #RX WA #0x1201a9
{ identity => 'Administrator', rights => ['mask_specific'], mask => '1180032' } #RA,S,WA,Rc #1180032 #0x120180
inherit_parent_permissions => 'false',
Note specifically that "rights=>['mask_specific']" also comes with a mask integer specified as a string e.g. "mask => '1180032'". Now where did that number come from? In this specific case you see it is RA,S,WA,Rc (Read Attributes, Synchronize, Write Attributes, Read Control). Let's take a look at http://msdn.microsoft.com/en-us/library/aa394063(v=vs.85).aspx to see the Access Mask values (integer and hex).
1048576 (0x100000)
1048576 (0x100000)
If we look here, 1048576 is the one we want. Let's whip out our calculators. You knew that math in high school and college was going to be put to good use, right? Okay, calculators out, let's add those numbers up.
Rc = 131072
That's the same as the number we have above, so we are good. You know how to make mask_specific happen with the acl module should you ever need to.
Oh, wait. I should explain a little more advanced scenario. RX, WA – like we started to talk about above. How do you get to that number, where is FILE_GENERIC_READ? Back to http://msdn.microsoft.com/en-us/library/windows/desktop/aa364399(v=vs.85).aspx, we can see that it includes FILE_READ_ATTRIBUTES, FILE_READ_DATA, FILE_READ_EA, STANDARD_RIGHTS_READ, and SYNCHRONIZE. FILE_GENERIC_EXECUTE contains FILE_EXECUTE, FILE_READ_ATTRIBUTES, STANDARD_RIGHTS_EXECUTE, and SYNCHRONIZE. Notice the overlap there? Each one of those flags only get added ONCE. This is important. If you are following along and looking, you have noticed STANDARD_RIGHTS_READ and STANDARD_RIGHTS_EXECUTE are not listed on the page with the rights. Where did those two come from? Take a look at http://msdn.microsoft.com/en-us/library/windows/desktop/aa374892(v=vs.85).aspx down in the C++ section. See if you notice anything? Wait, what?
STANDARD_RIGHTS_READ, STANDARD_RIGHTS_EXECUTE, and STANDARD_RIGHTS_WRITE are all synonyms for READ_CONTROL. What? Why not just call it read control? I don't know, I'm not the guy that wrote the Access Masks. Anyway, now we know what we have so let's get our calculators ready again.
REa = 8
StdRd = 131072
REa = 8
StdEx = 131072
Let's remove the duplicates (and the tricky READ_CONTROL duplicate).
That doesn't quite work out to what we were thinking of '1180073'. Did we forget something? Yes, we got a little wrapped up in just getting RX sorted out that we forgot about WA, which adds another 256 to the number.
Rc = 131072
While the ACL module has a simple interface you can definitely see that it packs some power with it. Having this kind of power is really helpful when you need to get fine-grained with your permissions.
Posted On Wednesday, July 9, 2014 1:04 PM | Comments (0) |
Tuesday, October 1, 2013
This is not something one would normally do, but this is here for future reference for me.
First of all ensure puppet, facter and hiera source codes are all checked out from git and have the same top level directory.
Then you take the environment.bat file that is shipped with the puppet installer (in the bin directory), copy it somewhere that you have in the PATH and you edit the first two lines to change the PL_BASEDIR to your top level directory for all of those previous items.
SET PL_BASEDIR=C:\code\puppetlabs
REM Avoid the nasty \..\ littering the paths.
::COMMENT THIS LINE SET PL_BASEDIR=%PL_BASEDIR:\bin\..=%
Then copy the puppet.bat file over to the same directory as your modified environment.bat file and you are money.
Don't have those files? No problem, I've created a Gist for that.
Puppet for the Win[dows]!
Posted On Tuesday, October 1, 2013 3:35 PM | Comments (1) |
Filed Under [
Monday, August 26, 2013
I recently attended PuppetConf 2013 (the 3rd annual event) and all I can say coming away from that is wow. It was an amazing event with quite a few amazing speakers and sessions out there. There were over 100 speakers and more than 1200 attendees. And we had live streaming for quite a few sessions and keynotes that had a huge attendance (I don't remember the number off the top of my head). With seven tracks going at a time, not including demos or hands on labs, it was quite an event.
Disclaimer: I work for Puppet Labs but my opinions are my own.
Disclaimer: I work for Puppet Labs but my opinions are my own.
The venue was awesome (San Francisco at the Fairmont Hotel) and I wished that I had a little more time outside of the conference to go exploring. Being there as an attendee, speaker, employee, and volunteer, I saw all sides of the conference. Everything was well prepared and I saw no hiccups from any side. Walking around at some of the events I could hear a buzz in the air about Windows and I happened to overhear a few folks mention the word chocolatey, which was definitely cool considering the majority of folks that are at PuppetConf are mainly Linux with some mixing of environments. I'm hoping to see that start to tip next year.
There were 4 talks on Windows and I was able to make it to almost all of them (5 talks if you consider my hands on lab a talk). Only two of those were given by puppets, so it was nice to see some talks considering there were none last year (I need to verify this).
Link: http://puppetconf2013b.sched.org/event/ddd309df1b03712cf1ba39224ad5e852#.Uht-a2RgbVM
The hands on lab did not go so well. Apologies to the attendees of the lab, but there was an issue with the virtual machine that I had provided. It was corrupted somewhere between copying it from my box to all of the USB sticks that we gave to lab attendees. Since it was only a 40 minute lab, we had to switch to a quick demo.
I did promise those folks that I would get them a functional hands on lab and here it is: https://github.com/chocolatey/puppet-chocolatey-handsonlab (You can take advantage of it as well for free!).
Link: http://puppetconf2013b.sched.org/event/ecfda2ef5c398eca29b00ce756cd405d#.Uht_7GRgbVM
My talk went very smoothly. It was almost night and day having given a failing lab a little over an hour prior to a talk that had quite a bit of energy in the room. I enjoyed the feedback coming from the audience and the session went (I felt) very well. Sessions were recorded so be on the lookout for that to show up soon. Until then you can check out the slides here: http://www.slideshare.net/ferventcoder/puppet-on-windows-now-youre-getting-chocolatey-puppetconf2013 – and if you came to the session, I'd appreciate feedback on how I did and where I can improve. You can do that here: http://speakerrate.com/talks/25271-puppet-on-windows-now-you-re-getting-chocolatey
Posted On Monday, August 26, 2013 11:40 AM | Comments (2) |
Filed Under [
Tuesday, June 25, 2013
Fear holds us back from many things. A little fear is healthy, but don't let it overwhelm you into missing opportunities.
Fear holds us back from many things. A little fear is healthy, but don't let it overwhelm you into missing opportunities.
In every career there is a moment when you can either step forward and define yourself, or sit down and regret it later. Why do we hold back: is it fear, constraints, family concerns, or that we simply can't do it?
I think in many cases it comes to the unknown, and we are good at fearing the unknown. Some people hold back because they are fearful of what they don't know. Some hold back because they are fearful of learning new things. Some hold back simply because to take on a new challenge it means they have to give something else up. The phrase sometimes used is "It's the devil you know versus the one you don't." That fear sometimes allows us to miss great opportunities.
In many people's case it is the opportunity to go into business for yourself, to start something that never existed. Most hold back hear for a fear of failing. We've all heard the phrase "What would you do if you knew you couldn't fail?", which is intended to get people to think about the opportunities they might create. A better term I heard recently on the Ruby Rogues podcast was "What would be worth doing even if you knew you were going to fail?" I think that wording suits the intent better. If you knew (or thought) going in that you were going to fail and you didn't care, it would open you up to the possibility of paying more attention to the journey and not the outcome.
In my case it is a fear of acceptance. I am fearful that I may not learn what I need to learn or may not do a good enough job to be accepted. At the same time that fear drives me and makes me want to leap forward. Some folks would define this as "The Flinch". I'm learning Ruby and Puppet right now. I have limited experience with both, limited to the degree it scares me some that I don't know much about either. Okay, it scares me quite a bit!
Some people's defining moment might be going to work for Microsoft. All of you who know me know that I am in love with automation, from low-tech to high-tech automation. So for me, my "mecca" is a little different in that regard.
Awhile back I sat down and defined where I wanted my career to go and it had to do more with DevOps, defined as applying developer practices to system administration operations (I could not find this definition when I searched). It's an area that interests me and why I really want to expand chocolatey into something more awesome. I want to see Windows be as automatable and awesome as other operating systems that are out there.
Back to the career-defining moment. Sometimes these moments only come once in a lifetime. The key is to recognize when you are in one of these moments and step back to evaluate it before choosing to dive in head first. So I am about to embark on what I define as one of these "moments." On July 1st I will be joining Puppet Labs and working to help make the Windows automation experience rock solid! I'm both scared and excited about the opportunity!
Posted On Tuesday, June 25, 2013 4:49 PM | Comments (3) |
Filed Under [
Saturday, June 1, 2013
Chocolatey has reached a milestone at 1K unique stable packages! When I started chocolatey a little over two years ago I didn't know there would be such a tremendous community uptake. I am blessed that you have found value in chocolatey and have contributed code, packages, bugs and ideas to making chocolatey better.
To celebrate this we should look at who contributed the package that put us over the top. It was Justin Dearing with SqlKerberosConfigMgr (http://chocolatey.org/packages/SqlKerberosConfigMgr). And I'm giving Justin a $50 gift card for Amazon as a small token of my appreciation. It's not much but we appreciate the contributions! This was unannounced because we want to focus on quality, not quantity.
Now, while this is a significant milestone, we are not very far in the bigger scheme of offerings for Windows. There is no hurry to get there, we prefer quality packages over quantity of packages. We will eventually grow much bigger and as we add additional sources, it increases the amount of packages we can offer.
Thanks so much to all of you for all of your work, we wouldn't be where we are today without the community!
Posted On Saturday, June 1, 2013 11:10 AM | Comments (0) |
Filed Under [
Thursday, January 3, 2013
I updated three packages this morning. I didn't even notice until the tweets came in from @chocolateynuget.
I updated three packages this morning. I didn't even notice until the tweets came in from @chocolateynuget.
How is this possible? It's simple. I love automation. I built chocolatey to take advantage of automation. So it would make sense that we could automate checking for package updates and publishing those updated packages. These are known as automatic packages. Automatic packages are what set Chocolatey apart from other package managers and I daresay could make chocolatey one of the most up-to-date package manager on Windows.
You've followed the instructions for creating a Github (or really any source control) repository with your packages. All you need to do now is to introduce two new utilities to your personal library, Ketarin and Chocolatey Package Updater (chocopkgup for short).
Ketarin is a small application which automatically updates setup packages. As opposed to other tools, Ketarin is not meant to keep your system up-to-date, but rather maintain a compilation of all important setup packages which can be burned to disc or put on a USB stick.
There are some good articles out there that talk about how to create jobs with Ketarin so I am not going to go into that.
Ketarin does a fantastic job of checking sites for updates and has hooks to give it custom command before and after it has downloaded the latest version of an app/tool.
Chocolatey Package Updater aka chocopkgup takes the information given out from Ketarin about a tool/app update and translates it into a chocolatey package that it builds and pushes to chocolatey.org. It does this so you don't even have to think about updating a package or keeping it up to date. It just happens. Automatically, in the background, and even faster than you could make it happen. It's almost as if you were the application/tool author.
Prerequisites And Setup:
#Items that could be replaced based on what you call chocopkgup.exe with
#{{PackageName}} - Package Name (should be same as nuspec file and folder) |/p
#{{PackageVersion}} - The updated version | /v
#{{DownloadUrl}} - The url for the native file | /u
#{{PackageFilePath}} - Downloaded file if including it in package | /pp
#{{PackageGuid}} - This will be used later | /pg
#{{DownloadUrlx64}} - The 64bit url for the native file | /u64
chocopkgup /p {appname} /v {version} /u "{preupdate-url}" /u64 "{url64}" /pp "{file}"
REM /disablepush
This gets Ketarin all set up with a global command for all packages we create. If you want to use Ketarin outside of chocolatey, all you need to do is remove the global setting for Before updating an application and instead apply it to every job that pertains to chocolatey update.
Create an Automatic Package:
Preferably you are taking an existing package that you have tested and converting it to an automatic package.
Testing Ketarin/ChocoPkgUp:
Automatic chocolatey packages are a great way to grow the number of packages you maintain without any significant jump in maintenance cost by you. I've been working with and using automatic packages for over six months. Is it perfect? No, it has issues from time to time (getting a good version read or actually publishing the packages in some rare cases). But it works pretty well. Over the coming months more features will be added to chocopkgup, such as been able to run its own PowerShell script (for downloading components to include in the package, etc) that would not end up in the final chocolatey package.
With full automation instead of having packages that are out of date or no longer valid, you run the small chance that something changed in the install script or something no longer works. The chances of this are much, much lower than having packages that are out of date or no longer valid.
It takes just a few minutes longer when creating packages to convert them to automatic packages but well worth it when you see that you are keeping applications and tools up to date on chocolatey without any additional effort on your part. Automatic packages are awesome!
Posted On Thursday, January 3, 2013 1:15 AM | Comments (0) |
Filed Under [
Wednesday, December 19, 2012
Recently I mentioned this.Log. Given the amount of folks that were interested in this.Log, I decided to pull this source out and make a NuGet package (well, several packages).
The source is now located at https://github.com/ferventcoder/this.log. Please feel free to send pull requests (with tests of course). When you clone it, if you open visual studio prior to running build.bat, you will notice build errors. Don't send me a pull request fixing this, I want it to work the way it does now. Use build.bat appropriately.
To try to cut down on the version number being listed everywhere, I created a SharedAssembly.cs (and a SharedAssembly.vb for the VB.NET samples). That helped, but it didn't solve the problem where it was in the nuspecs as dependencies. So I took it a step further and created a file named VERSION. When you run the build, it updates all the files that contain version information. Having one place to handle the version is nice.
When moving this.Log to a NuGet package (or in this case 9 NuGet packages), I was able to play with some features of NuGet I had not previously, symbol servers and packing a csproj. With packing a csproj, I was able to quickly (well mostly) set up the build to package up every project with NuGet packages.
All packages can be found by searching for this.log on NuGet.org.
NOTE: If you've installed any of these prior to this post, you will want to uninstall and reinstall them (there was an particular issue with the version on the Rhino Mocks version). I've fixed and updated quite a bit on them from version 0.0.1.0 to 0.0.2.0.
Performance testing with log4net showed this only has an overhead of 42 ticks tested over 100,000 iterations. That's a pretty good start given that it has a reflection hit on every call.
Posted On Wednesday, December 19, 2012 11:21 PM | Comments (0) |
Filed Under [
Saturday, December 15, 2012
One of my favorite creations over the past year has been this.Log(). It works everywhere including static methods and in razor views. Everything about how to create it and set it up is in this gist.
public class SomeClass {
public void SomeMethod() {
this.Log().Info(() => "Here is a log message with params which can be in Razor Views as well: '{0}'".FormatWith(typeof(SomeClass).Name));
this.Log().Debug("I don't have to be delayed execution or have parameters either");
public static void StaticMethod() {
"SomeClass".Log().Error("This is crazy, right?!");
This uses the awesome static logging gateway that JP Boodhoo showed me a long time ago at a developer bootcamp, except it takes the concept further. One thing that always bothered me about the static logging gateway is that it would construct an object EVERY time you called the logger if you were using anything but log4net or NLog. Internally it likely continued to reuse the same object, but at the codebase level it appeared as that was not so.
/// <summary>
/// Logger type initialization
/// </summary>
public static class Log
private static Type _logType = typeof(NullLog);
private static ILog _logger;
/// <summary>
/// Sets up logging to be with a certain type
/// </summary>
/// <typeparam name="T">The type of ILog for the application to use</typeparam>
public static void InitializeWith<T>() where T : ILog, new()
_logType = typeof(T);
/// <summary>
/// Sets up logging to be with a certain instance. The other method is preferred.
/// </summary>
/// <param name="loggerType">Type of the logger.</param>
/// <remarks>This is mostly geared towards testing</remarks>
public static void InitializeWith(ILog loggerType)
_logType = loggerType.GetType();
_logger = loggerType;
/// <summary>
/// Initializes a new instance of a logger for an object.
/// This should be done only once per object name.
/// </summary>
/// <param name="objectName">Name of the object.</param>
/// <returns>ILog instance for an object if log type has been intialized; otherwise null</returns>
public static ILog GetLoggerFor(string objectName)
var logger = _logger;
if (_logger == null)
logger = Activator.CreateInstance(_logType) as ILog;
if (logger != null)
return logger;
You see how when it calls InitializeFor, that's when you get something like the following in the actual implemented method:
_logger = LogManager.GetLogger(loggerName);
So we take the idea a step further by implementing the following in the root namespace of our project:
/// <summary>
/// Extensions to help make logging awesome
/// </summary>
public static class LogExtensions
/// <summary>
/// Concurrent dictionary that ensures only one instance of a logger for a type.
/// </summary>
private static readonly Lazy<ConcurrentDictionary<string,ILog>> _dictionary = new Lazy<ConcurrentDictionary<string, ILog>>(()=>new ConcurrentDictionary<string, ILog>());
/// <summary>
/// Gets the logger for <see cref="T"/>.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="type">The type to get the logger for.</param>
/// <returns>Instance of a logger for the object.</returns>
public static ILog Log<T>(this T type)
string objectName = typeof(T).FullName;
return Log(objectName);
/// <summary>
/// Gets the logger for the specified object name.
/// </summary>
/// <param name="objectName">Either use the fully qualified object name or the short. If used with Log<T>() you must use the fully qualified object name"/></param>
/// <returns>Instance of a logger for the object.</returns>
public static ILog Log(this string objectName)
return _dictionary.Value.GetOrAdd(objectName, Infrastructure.Logging.Log.GetLoggerFor);
You can see I'm using a concurrent dictionary which really speeds up the operation of going and getting a logger. I get the initial performance hit the first time I add the object, but from there it's really fast. I do take a hit with a reflection call every time, but this is acceptable for me since I've been doing that with most logging engines for awhile.
If you are interested in the details, see this gist.
Extensions are awesome if used sparingly. Is this.Log perfect? Probably not, but it does have a lot of benefits in use. Feel free to take my work and make it better. Find a way to get me away from the reflection call every time. I've been using it for almost a year now and have improved it a little here and there.
If there is enough interest, I can create a NuGet package with this as well.
Posted On Saturday, December 15, 2012 9:22 AM | Comments (2) |
Friday, December 14, 2012
The following is a script that I used to help me clean up a database and reduce the size of it from 95MB down to 3MB so we could use it for a development backup. I will note that we also removed some of the data out. I shared this with a friend recently and he used this to go from 70GB to 7GB!
Please don't run this against something that is live or performance critical. You want to do this where you are the only person connected to the database, like a restored backup of the critical database. Doing it against something live will most definitely cause issues. I can in no way be responsible for the use of this script. You should understand what you are doing before you execute these scripts.
Provided it shows up correctly, here is the gist:
* Scripts to remove data you don't need here
* Now let's clean that DB up!
DECLARE @DBName VarChar(25)
SET @DBName = 'DBName'
* Start with DBCC CLEANTABLE on the biggest offenders
PRINT 'Looking at the largest tables in the database.'
t.NAME AS TableName,
i.name AS indexName,
SUM(p.rows) AS RowCounts,
SUM(a.total_pages) AS TotalPages,
SUM(a.used_pages) AS UsedPages,
SUM(a.data_pages) AS DataPages,
(SUM(a.total_pages) * 8) / 1024 AS TotalSpaceMB,
(SUM(a.used_pages) * 8) / 1024 AS UsedSpaceMB,
(SUM(a.data_pages) * 8) / 1024 AS DataSpaceMB
sys.tables t
sys.indexes i ON t.OBJECT_ID = i.object_id
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
sys.allocation_units a ON p.partition_id = a.container_id
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id <= 1
t.NAME, i.object_id, i.index_id, i.name
PRINT 'Cleaning the biggest offenders'
DBCC CLEANTABLE(@DBName, 'dbo.Table1')
DBCC CLEANTABLE(@DBName, 'dbo.Table2')
t.NAME AS TableName,
i.name AS indexName,
SUM(p.rows) AS RowCounts,
SUM(a.total_pages) AS TotalPages,
SUM(a.used_pages) AS UsedPages,
SUM(a.data_pages) AS DataPages,
(SUM(a.total_pages) * 8) / 1024 AS TotalSpaceMB,
(SUM(a.used_pages) * 8) / 1024 AS UsedSpaceMB,
(SUM(a.data_pages) * 8) / 1024 AS DataSpaceMB
sys.tables t
sys.indexes i ON t.OBJECT_ID = i.object_id
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
sys.allocation_units a ON p.partition_id = a.container_id
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id <= 1
t.NAME, i.object_id, i.index_id, i.name
* Fix the Index Fragmentation and reduce the number of pages you are using (Let's rebuild and reorg those indexes)
PRINT 'Selecting Index Fragmentation in ' + @DBName + '.'
DB_NAME(DPS.DATABASE_ID) AS [DatabaseName]
,OBJECT_NAME(DPS.OBJECT_ID) AS TableName
,SI.NAME AS IndexName
,DPS.INDEX_TYPE_DESC AS IndexType
,DPS.AVG_FRAGMENTATION_IN_PERCENT AS AvgPageFragmentation
,DPS.PAGE_COUNT AS PageCounts
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) DPS --N'LIMITED') DPS
INNER JOIN sysindexes SI
ORDER BY DPS.avg_fragmentation_in_percent DESC
PRINT 'Rebuilding indexes on every table.'
EXEC sp_MSforeachtable @command1="print 'Rebuilding indexes for ?' ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90)"
PRINT 'Reorganizing indexes on every table.'
EXEC sp_MSforeachtable @command1="print 'Reorganizing indexes for ?' ALTER INDEX ALL ON ? REORGANIZE"
--EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', ' ', 80)"
PRINT 'Updating statistics'
EXEC sp_updatestats
DB_NAME(DPS.DATABASE_ID) AS [DatabaseName]
,OBJECT_NAME(DPS.OBJECT_ID) AS TableName
,SI.NAME AS IndexName
,DPS.INDEX_TYPE_DESC AS IndexType
,DPS.AVG_FRAGMENTATION_IN_PERCENT AS AvgPageFragmentation
,DPS.PAGE_COUNT AS PageCounts
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) DPS --N'LIMITED') DPS
INNER JOIN sysindexes SI
ORDER BY DPS.avg_fragmentation_in_percent DESC
* Now to really compact it down. It's likely that SHRINKDATABASE will do the work of SHRINKFILE rendering it unnecessary but it can't hurt right? Am I right?!
DECLARE @DBName VarChar(25), @DBFileName VarChar(25), @DBLogFileName VarChar(25)
SET @DBName = 'DBName'
SET @DBFileName = @DBName
SET @DBLogFileName = @DBFileName + '_Log'
DBCC SHRINKFILE(@DBLogFileName,1)
DBCC SHRINKFILE(@DBFileName,1)
DBCC SHRINKDATABASE(@DBName,1)
Here are some of the references in the gist:
Posted On Friday, December 14, 2012 9:43 AM | Comments (1) |
Filed Under [
Wednesday, December 12, 2012
Refresh database is an workflow that allows you to develop with a migrations framework, but deploy with SQL files. It's more than that, it allows you to rapidly make changes to your environment and sync up with other teammates. When I am talking about environment, I mean your local development environment: your code base and the local database back end you are hitting.
Refresh database comes in two flavors, one for NHibernate and one for Entity Framework. I'm going to show you an example of the one for Entity Framework, which you can find in the repository for rh-ef on github. One note before we get started: This could work with any migrations framework that will output SQL files.
How long do you spend updating source code and then getting your database up to snuff afterward so you can keep moving forward quickly? Do you work with teammates? Do you have multiple workstations that you might work from and want to quickly sync up your work?
It's a pain most of us don't see and an idea that was originally incubated by Dru Sellers. He wanted a fast way of keeping his local stuff up to date right from Visual Studio. Out of that was born Refresh Database. We are talking a simple right click and debug to a synced up database.
Others have talked in the past about how you want to use the same migration algorithm and test it all the way up to production. Refresh DB allows you to test that migration from a local development environment many times a day. So by the time you hand over the SQL files for production (or use RoundhousE), there is no guess work about whether it is going to work or not. You have a security in knowing that you are good to go.
It's definitely something that can really speed up your team so you never hear "I got latest and now I'm trying to sync up all the changes to the database." This should be easy. This should be automatic.
You should never again hear "I made some domain changes but now I'm working to get them into the database." This should be easy. This should be automatic.
Whether you decide to look further into this or not, it doesn't matter to me. It just means my teams will get to market and keep updated faster than you (given the same technologies, ).
This is the simple part. Convincing you to look at it in the first place is the hard part. I have put together a short video to show you exactly how it works. You will see that it is super simple.
Refresh Database has been around for over two years. It's definitely something that has paid for itself time and again. It's something you might consider looking at it if you have never heard of it.
If you don't do something with migrations and source control for your database yet, please start now. This will save you countless hours in the future. I've walked into more than one company that was hurting in the area of database development b/c they didn't treat the database scripts as source code in the same way that they did the rest of the code. It's a must anymore. I also see teams doing shared development database development. This is a huge no no (except in certain considerations) due to the amount of lost time it causes. That however, is a discussion for another day.
Posted On Wednesday, December 12, 2012 5:08 PM | Comments (2) |
Filed Under [
If you use VMWare/VirtualPC and you want to offload your source code repositories to your host OS and code from it inside the VM, you need to do a few things to fully trust the share.
I've found that I keep heading out and searching on this every time I need it so I thought I would write it down this time to save myself the trouble next time.
Save the following as caspol.bat:
%WINDIR%\Microsoft.NET\Framework\v2.0.50727\caspol -q -machine -ag 1.2 -url file://e:/* FullTrust
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\caspol -q -machine -ag 1.2 -url file://e:/* FullTrust
%WINDIR%\Microsoft.NET\Framework64\v2.0.50727\caspol -q -machine -ag 1.2 -url file://e:/* FullTrust
%WINDIR%\Microsoft.NET\Framework64\v2.0.50727\caspol -q -machine -ag 1.2 -url file://e:/* FullTrust
%WINDIR%\Microsoft.NET\Framework\v2.0.50727\caspol -q -machine -ag 1.2 -url file://\\vmware-host\* FullTrust
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\caspol -q -machine -ag 1.2 -url file://\\vmware-host\* FullTrust
%WINDIR%\Microsoft.NET\Framework64\v2.0.50727\caspol -q -machine -ag 1.2 -url file://\\vmware-host\* FullTrust
%WINDIR%\Microsoft.NET\Framework64\v2.0.50727\caspol -q -machine -ag 1.2 -url file://\\vmware-host\* FullTrust
Make sure you replace the file locations appropriately. Then run it as an administrator.
This will do the first part of allowing your code to execute without security exceptions. Credit to Chris Sells for the most comprehensive article on this: http://www.sellsbrothers.com/Posts/Details/1519
This is one I've found to get stuff to build that I didn't find anywhere else. Even after running caspol I still couldn't run executables on the share. That is, until I made the share part of the Local Intranet.
This will allow for executables to start working. All but the ones built and run from Visual Studio.
It may be awhile before you run into this one. You may have a console application you are building. You will notice once you move over to the share, you start getting errors related to that. What you need to do is add a small configuration value to the the config files.
Add the following to your config files:
<loadFromRemoteSources enabled="true" />
This will allow it to be loaded into memory, otherwise it will not run from a network share.
Caveats to think about when developing against a share:
Posted On Wednesday, December 12, 2012 1:08 AM | Comments (0) |
Filed Under [
Powered by:
Copyright © Robz / Fervent Coder


text:
OK, now that all of the fake accounts are gone, I realized that the rest of you really aren't any less annoying. Just stop it with your awful commenting. I can't even focus on today's high-quality posts with all that nonsense down below.
That being said, I think we probably need eight unique commenters to keep the gene pool varied. I'm obviously one of them, so if you'd like to be considered for one of the remaining seven slots, reply below with your best material.

subset: commoncrawl


text:
Category Archives: K
Ernie Koy, Jr.
Ernie Koy, Jr. (Pro football. Born, Bellville, TX, Oct. 22, 1942.) A 225-pound running back from the U. of Texas, Ernest Melvin Koy was a No. 1 draft choice by the Giants in 1965. Koy was a member of the "Baby Bulls" backfield with 220-pounders Steve Thurlow and Tucker Frederickson. He played at 225. Injuries were a problem for Koy and in his rookie year, he carried only 35 times and mostly handled the Giants' punting. Koy's best year was 1967, when he gained 704 yards rushing (a 4.8 average), scoring four touchdowns, and caught 32 passes for another 212 yards and another touchdown. He played through 1970 but never approached those numbers again. Koy gained 160 yards rushing Oct. 1, 1967, against Washington, then the Giants' third-best individual rushing effort ever. He finished with 1,723 yards rushing on 414 carries and 498 more on 76 receptions. Koy's father was a major league outfielder.
Jim Kaat
Jim Kaat (Baseball. Born, Zeeland, MI, Nov. 7, 1938.) A solid lefthander who pitched for 25 years in the major leagues, James Lee Kaat had a playing career that touched four decades (1959-83). Kaat, who was also an excellent fielder, was 283-237 in his career with five teams. He had his best seasons with Minnesota but also twice won 20 games with the White Sox. Kaat appeared in 44 games for the Yankees (1979-80). His second career as a broadcast analyst began even before his playing days had ended but came to full flower after his retirement. Kaat worked 100 Yankees games for WPIX-TV in 1986. He returned to the Yankees with MSG Network in 1995, essentially replacing Tony Kubek as analyst, and moved to YES in 2002 when that network took over the Yankees telecasts. He retired from YES Network broadcasts in 2006.
Also posted in Baseball | Tagged Baseball, Broadcast analyst, James Lee Kaat, Jim Kaat, MSG Network, Tony Kubek, Yankees, YES Network
Rich Kahn
Rich Kahn (Public address. Born, Brooklyn, NY, Sept. 27, 1951.) A television public relations executive, Richard A. Kahn served as the Jets public address announcer for 19 seasons (1983-2001). Kahn's first season was the team's last at Shea Stadium. His tenure was the longest in that job ever for the Jets. Kahn also did public address for the Islanders (1982-95), Fordham, Seton Hall, and C.W. Post (his alma mater). He was director of marketing and public relations at SportsChannel (1987-94) before joining Primestar Satellite TV. In 2005, he became the voice of the Palestra in Philadelphia, PA.
Also posted in Public address | Tagged Islanders, Jets, Palestra, Primestar Satellite TV, Public address, Rich Kahn, Richard A. Kahn, Shea Stadium, SportsChannel
Roger Kahn
Roger Kahn (Sportswriter. Born, Brooklyn, NY, Oct. 31, 1927.) Joining the New York Herald Tribune fresh out of N.Y.U. in 1948, Roger Kahn began his career as a general assignment reporter but gravitated to sports. During that period, Kahn covered the Dodgers in Brooklyn but left the paper in 1955 to become a contributor to the then-new Sports Illustrated. In 1956, he was named the New York sports editor of Newsweek, where he remained until 1960. Kahn became a prolific and much-praised magazine writer, but was transformed into a national name in 1972 with the publication of The Boys of Summer, his insightful book about the great Dodgers teams he had covered in the 1950s. Another baseball book, A Season in the Sun, followed in 1977 to general, though not universal, acclaim. His third national best-seller was Pete Rose: My Story (with Rose) in 1989.
Jack Kaiser
Jack Kaiser (College athletics. Born, Brooklyn, NY, Oct. 6, 1926.) A highly-successful baseball coach, John Warren Kaiser served 22 years (1973-95) as St. John's director of athletics. Kaiser was also one of three founders of the Big East Conference in 1979 (Dave Gavitt of Providence and Seton Hall's Richie Regan were the others). He played four seasons (1950-53) in the Boston Red Sox farm system and also managed in the minors. Kaiser hit .303 in 131 games at Roanoke, Va., in the Piedmont League in 1951. A leg injury ended his playing career. After three years as an assistant, he became St. John's varsity baseball coach in 1956. In 18 seasons, he compiled a sterling 366-130 record and sent several players to pro ball. Kaiser spent 15 seasons (1952-67) in the Redmen basketball program as an assistant, freshman, and junior varsity coach. He had coached basketball at Brooklyn Prep in 1949-50. Having been the basketball ticket manager, he rose to assistant athletic director and succeeded Walter T. McLaughlin in 1973. Kaiser has served on numerous N.C.A.A. committees and as president of the American Baseball Coaches Association (1969-70). He was also president of the M.I.B.A., the group that presented the N.I.T. basketball tournament.
Bill Kane
Bill Kane (Baseball. Born, Brooklyn, NY, Aug. 29, 1937.) A ubiquitous figure in the Yankees organization for more than three decades, William Kevin Kane served twice as the team's traveling secretary. Kane, known to his friends as Killer, began as a radio-television statistician in the days long before such work was computerized. He then became an administrative assistant in the front office and did his first stint as road secretary from 1974-76 before returning to the front office. In August 1978, Kane and his successor, Gerry Murphy, switched assignments, with Kane again becoming traveling secretary. When the team staged its legendary comeback and won the World Series, he was stuck with the job and remained on the road through 1987. Kane then served as assistant general manager and returned in the 1990s as the supervisor of luxury box services before retiring.
Rocky Kansas
Rocky Kansas (Boxing. Born, Buffalo, NY, Apr. 21, 1895; died, Buffalo, NY, Jan. 10, 1954.) Born Rocco Tozzo, Kansas was a lightweight who fought 165 times in a 21-year career (1911-32) and won the division championship in 1925. Kansas fought just seven times in New York but earned headlines for two bouts against champion Benny Leonard and a win over Lew Tendler. His celebrated bout with Leonard was actually at the Harrison Oval in Harrison, N.J., June 6, 1921, when the pair drew 28,000 for a 12-round no-decision. That led to a rematch Feb. 10, 1922, at Garden No. 2, which drew 11,683 but grossed over $100,000, a big figure for a non-heavyweight fight. Leonard defended his crown with a 15-round decision. Kansas finally won the title in Buffalo Dec. 7, 1925, but lost it to Sammy Mandell July 3, 1926, in Chicago, Ill. He retired shortly after that loss but then made a brief comeback. Nearly half (81) of his fights were no-decision affairs, but he lost only 13 times and won 64 with seven draws.
Also posted in Boxing | Tagged Benny Leonard, boxing, Harrison Oval, Lew Tendler, lightweight champion, Rocco Tozzo, Rocky Kansas, Sammy Mandell
Max Kase
Max Kase (Sports editor. Born, New York, NY, July 21, 1898; died, Yonkers, NY, Mar. 19, 1974.) Max Kase was known during his years as sports editor of the New York Journal-American for his newsy notes column entitled "Briefkase." He had a distinct "nose for news." Two years after the merger of the New York American and the Evening Journal into the afternoon Journal-American in 1939, Kase succeeded Ed Frayne as the sports editor of the combined operation. In 1945, when columnist Bill Corum got wind of the Yankees' sale by the Ruppert Estate, Kase took over the story and tracked down mystery buyer Del Webb (a partner with Dan Topping and Larry MacPhail). He woke Webb in a hotel suite with a late-night telephone call and scored a Page One scoop. Six years tater, Kase's dogged determination helped uncover the 1951 college basketball betting scandals. Kase received a special Pulitzer Prize citation the following year. All of those associated with Kase, however will recall his daily greeting, "Got any notes?" He was relentless in collecting items for his column. Kase was very active in many social and professional groups, serving as the driving force behind the formation of B'nai B'rith Sports Lodge and its annual fund-raising dinner.
Also posted in Sports editor | Tagged Baseball, Bill Corum, Briefkase, B'nai B'rith Sports Lodge, College basketball, Dan Topping, Del Webb, Ed Frayne, Got any notes?, Journal-American, Larry MacPhail, Max Kase, New York American, New York Evening Journal, Sports editor
Jim Katcavage
Jim Katcavage (Pro football. Born, Wilkes-Barre, PA, Oct. 28, 1934; died, Maple Glen, PA, Feb. 22, 1995.) Drafted out of Dayton as the Giants' fourth pick in 1956, James R. Katcavage became a standout defensive left end. Katcavage was an all-N.F.L. choice three straight years (1961-63) and was a Pro Bowl selection in both 1963 and 1964. As a rookie, he played both defensive end and tackle for the 1956 world champions, but then became a mainstay at left end. Katcavage was a regular on five Eastern Division champions (1958, 1959, 1961, 1962, 1963). He posted safeties in 1958 and 1961 and scored a touchdown on a recovered fumble in 1963
Also posted in Football | Tagged Football Giants, Giants, James R. Katcavage, Jim Katcavage, N.F.L, New York Football Giants, Pro Bowl
Benny Kauff
Benny Kauff (Baseball. Born, Middleport, OH, Jan. 5, 1890; died, Columbus, OH, Nov. 17, 1961.) Known as the "Ty Cobb of the Feds," Benjamin Michael Kauff spent most of his early career under the control of the Yankees. Kauff played only five games for them in 1912 and spent much of the next two years shuttling around the minors. When the Federal League tried to become the third major league in 1914, he jumped to the Feds' Indianapolis club. When that team moved to Newark in 1915, Kauff went to Brooklyn as a form of territorial compensation. He won the batting title both years the F.L. was in operation, hitting .370 (1914) and .342 (1915). Kauff also led the upstart league in stolen bases twice with 70 and 55. When the F.L. collapsed, Kauff's rights went to the Giants, where he stole 40 bases but hit just .264 in 1916. He hit .308 with 30 steals in 1917 and got four hits in the World Series, homering twice in Game 4. Still, it is unlikely that Giants manager John McGraw considered him worth the $30,000 he paid to the Brookfeds for Kauff's rights. Kauff played five years for the Giants (1916-20) despite repeated rumors of his involvement in gambling coups. He and his brother were charged with auto theft in 1921 and, though Kauff was acquitted, Commissioner Landis barred him for life for consorting with criminals. Kauff sued Landis and lost. The lefthanded hitter finished with a .311 average for 859 games, including the two stellar years with the Feds.


text:
HDR-AS100V POV Action Cam + Live View Remote Bundle
Step it up with the Action Cam that brings pro-quality features along for the ride. Keep things smooth with Advanced Steady Shot and enjoy the convenience of built-in Wi-Fi with remote viewing and control from your Live View Remote. All in a housing-free, splash-proof body that packs XAVC S HD recording and high frame rates in 120/240p. It?s ready for the big time, are you?
Key Features:
Advanced image stabilization adjusts to vibration SteadyShot image stabilizing function allows smooth image shooting while the user is in motion. With the new Action Cam, the image stabilizer powerfully compensates for minute rapid vibrations typically caused by bicycle/motorcycle motion.
New splash proof body with tripod mount The HDR-AS100V was built with an all new splash proof body (IPX4-class). Enjoy carefree use of the Action Cam outside of its included housing3, even in rainy weather or splash-prone situations. With a universal tripod screw mount on the body of the Action Cam itself, you can easily attach the camera directly to a tripod. SteadyShot? image stabilizing function allows smooth image shooting while the user is in motion. With the new Action Cam, the image stabilizer powerfully compensates for minute rapid vibrations typically caused by bicycle/motorcycle motion.
View and control via smartphone/ Live View Remote Turn compatible smart phones and tablets in to remote control viewing devices via Wi-Fi with One Touch Near Field Communication (NFC). Users can now control up to 5 Action Cams (HDR-AS100V) at the same time using the optional Live View Remote.
Shoot pro quality video in XAVC-S 60p(50 Mbps) Pro quality XAVC-S recording with 50Mbps high bit rate data transfer enables HDR-AS100V to capture quick action with smooth image motion. HDR-AS100V also supports 24p high-speed 120 fps and 240 fps shooting with sound. Additionally, users can shoot the easily shareable MP4 HD video, ideal for web.
Plot location and display telemetry with built-in GPS Built in GPS can be used in conjunction with the included PlayMemories Home software to make viewing and sharing videos fun and easy. Location and trail information as well as speed information add more layers to your ability to analyze your performance that can be captured and displayed on your video.
Built-In stereo mic for quality sound recordingA built-in stereo microphone allows you to capture all the exciting sounds of your adventure.Exmor R CMOS sensor for superb low light shooting Experience stunning low-light sensitivity with improved image clarity and drastically reduced grain with Sony?s back-illuminated Exmor R CMOS sensor.
Ultra wide 170? pro quality Carl Zeiss Vario-Tessar lens With an ultra-wide angle Carl Zeiss Vario-Tessar lens, you will increase your perspective (170-degree viewing angle) while you venture out on breathtaking views of dynamic terrain to include ski slopes and mountain trails.
Capture high quality 13.5MP still images in photo mode Put your HDR-AS100V in still image mode and capture amazing high quality 13.5MP still images with a single press of the button.
Memory Stick Micro and Micro SD/SDHC compatible Expandable memory with Memory Stick Micro and Micro SD/SDHC card slot.
HDMI output for easy file transfer
With HDMI output, you?ll be able to share your Sony HDR-AS100V video with friends and family on your HDTV (HDMI cable required/not included).
Exposure System
Drive System
Convenience Features
Advanced Features
Weights and Measurements
Receive Our Latest Deals
Connect With Buydig


text:
Filters that can alter the length of an incoming request body or outgoing response body must take special steps to ensure interoperability with other filters and SAFs.
Filters that process incoming data are referred to as input filters, so that an input filter can alter the length of the incoming request body. For example, if a filter decompresses incoming data and a Content-Length header is in the rq->headers pblock, the filter's insert filter method should remove the Content-Length header and replace it with a Transfer-encoding: identity header as follows:
pb_param *pp; pp = pblock_remove("content-length", layer->context->rq->headers); if (pp != NULL) { param_free(pp); pblock_nvinsert("transfer-encoding", "identity", layer->context->rq->headers); }
Because some SAFs expect a content-length header when a request body is present, before calling the first Service SAF, the server will insert all relevant filters, read the entire request body, and compute the length of the request body after it has been passed through all input filters. However, by default, the server will read at most 8192 bytes of request body data. If the request body exceeds 8192 bytes after being passed through the relevant input filters, the request will be cancelled. For more information, see the description of ChunkedRequestBufferSize in the "Syntax and Use of obj.conf"chapter in the Sun Java System Web Server 7.0 Update 3 Administrator's Configuration File Reference.
Filters that process outgoing data are referred to as output filters. If an output filter can alter the length of the outgoing response body. Foor example, if the filter compresses outgoing data, the filter's insert filter method should remove the Content-Length header from rq->srvhdrs as follows:
pb_param *pp; pp = pblock_remove("content-length", layer->context->rq->srvhdrs); if (pp != NULL) param_free(pp);


text:
The delicate matter of base closures
The man who ran the last round of military base closures knows better than anyone that it's one of the toughest jobs in Washington — but he says going through with it again soon might ultimately be better than putting it off.
Anthony Principi, a former secretary of Veterans Affairs and the chairman of the 2005 Base Realignment And Closure Commission — known by the infamous shorthand BRAC — told POLITICO in an exclusive interview that he appreciates as few do just how tough it is for members of Congress, local officials and communities.
Story Continued Below
Military downsizing is a fact of life, however, and so if Congress doesn't agree to the new rounds of BRAC the Defense Department is expected to pitch in its budget submission next month, Principi said, it might still wind up with changes — ones outside its control, under another name.
"You can do some of it without a BRAC, but what you're really doing is having a BRAC under the radar," he said. "Defense still has some authorities where they can piecemeal a base apart. There are certain requirements in the law where you can cut [some] civilian personnel, you can move military personnel. … That doesn't help a community, in my view."
And if there's anything Congress hates more than BRAC, it's a "backdoor BRAC," or "stealth BRAC," as members call it. But Principi pointed out that the Air Force, for example, has about 500 fewer aircraft than it did in the last BRAC and yet has "excess" real estate at its bases around the country. The Army plans to disestablish six of its U.S-based brigade combat teams. So something's got to give — especially, as defense officials have warned, if sequestration winds up shrinking the force even more than previously planned.
Defense advocates are covering their ears. The Pentagon hasn't even sent its budget to Capitol Hill, but Rep. Rob Wittman — the Virginia Republican who chairs the House Armed Services Committee's readiness panel — convened a hearing to pre-emptively rule out the prospect of BRAC.
"There is simply not enough evidence to even consider moving forward in such a time of uncertainty," he said. The process of BRAC costs a substantial amount of money to execute, and real savings don't accrue for years after the BRAC is initiated. In the case of BRAC 2005, we will not accrue savings until 2018, 13 years into its implementation. We have too many long-view decisions that need to be sorted out and need to be settled before we make a shortsighted decision to authorize a BRAC round."
Principi acknowledged that the 2005 BRAC was more expensive than any other — a congressional report estimated that it wound up running $14.1 billion over its original estimate, for a total price tag of $35.1 billion — but he said much of that came from costs incurred after the closure decisions, especially in military construction.
"There was inflation in [military construction]," he said. "There were some structures that — I won't say they were gold-plated, but they were very large. I'm trying to be objective here — if you go out and see these structures, they were certainly built to last a long time."
At least the BRAC process lets lawmakers and communities plead their case, Principi said, and he remembered occasions in which the commission's involvement helped save everyone involved from potentially bad outcomes.
For example, Principi flew up to Kittery, Maine, the home of Portsmouth Naval Shipyard, a major economic engine for Maine and New Hampshire that the Defense Department had slated for closure. Principi's and BRAC's job was to visit the site and decide whether to concur or object.


text:
But summer is tricky too, and sometimes a little bit exhausing. I finally realized what makes it stressful for me – the lack of structure. Don't get me wrong, one of the great things about summer is the lazy, fly-by-the-seat-of-your-pants, care-free lifestyle. But the part of me that craves planning and schedules can sometimes get frustrated…
I'm trying to do better about just 'letting-go' and enjoying the moment. I actually read a book, or two, over the past few weeks, which I honestly haven't done for months. So there you go. Has anyone else watched or read Call the Midwife? It's my latest favorite show from the BBC [of course.] Highly recommend both books and show. There are some gritty, hard, tragic parts, but that was the reality that people faced (some of it makes Dickens look like a fairy tale.) And the hope, and faith, and human kindness that come out if it, is so endearing and inspiring. (Although there is a little TMI about the "Cafes" (aka Brothels) in the first book. You may want to skip that part.)
We've been trying to explore new places. This is one my friend Calli told me about. It's a 110-yr-old summer-house in the foothills a few miles from our house. All that is left of the house itself are two crumbling exterior walls, but there are remnants of the flower garden surrounding the house.
I'm trying to remind myself to embrace this time with my kids right now and do a better job of living in the moment – a constant battle. They are at such fun ages – I seriously think we're in the golden years before they're too grown up and don't want to hang around with us as much anymore. I feel like I need to soak it up and make the most of it while I can.
One thing we're doing is volunteering at This Is the Place Heritage Park in Salt Lake City. (Think Pioneer version of Williamsburg or Old Sturbridge Village.) It's a place we've liked visiting in summers past and my kids were so excited about volunteering there once a week this summer. I have to admit, I was less enthusiastic, but felt like I'd better run with it since they were gung-ho (even the boys), and probably won't always feel that way about dressing in pioneer clothes and hanging out someplace with no access to phones, computers or other screens. The first week we went there, I realized that this is going to work out even better than I'd hoped. Time to hang out together, un-interrupted and un-distracted. We're even working on a quilt. I think it's just what I needed. I'm going to have to share more thoughts and pictures on that adventure in a future post.


text:
This web site is no longer available through this link. Please choose an alternative web site from the list shown below:
Alternative Web Sites
As a parent there are always many demands on your time and it can sometimes be hard to find time to source really exciting, high-quality activities to do with your little ones. Andy started Weekend Box with the aim of solving that problem by helping you along your incredible journey and the experience of bringing up your children by providing you with the things you need when you need them. Our focus is to source the highest-quality products from the best, independent suppliers across the UK. We assess each of our suppliers to ensure that their values match ours own high standards.
Click here to visit
Ink Factory have been selling stuff online since the 90's and their product range has grown to include more than just ink cartridges. They now sell a full range of laser toner, software titles, batteries, CD & DVD media and other products. Their self-proclaimed "unsurpassed" customer service, FAST and FREE UK delivery, a FREE and EASY returns procedure and their 100% Satisfaction and price guarantee mean there really is no reason for customers to shop anywhere else. Ink Factory pay generous commissions as follows: Clearance and sale items = 25% Recycled ink cartridges = 10% Compatibe ink cartridges = 10% All other items = 5% The cookie period is 30 days.
Click here to visit


text:
I currently live aboard as an Ex Pat and own a property in the UK which I want to refinance to get a buy to let mortgage is this possible? As an expatriate you will be aware that getting a mortgage on your property may not be a simple as before but nevertheless there are solutions available to you. If you have notified the existing lender that you have left the country then this is a 'tick in the … [Read more...]
You are here: Home / Archives for expatriate mortgages


text:
Thursday, December 29, 2011
In which I become very, very UNpopular
I've been threatening to do this for a good long while, but now it seems to be actually happening. By "this", I mean my blog of unpopular opinions. The first post will explain the commenting policy, which I'm certain everyone will loathe. I will also be making a call for submissions very, very soon.
I'm really excited about this, and others seem to be too, which fills me with pretty much equal parts dread and delight. I'm an opinionated monster, but don't much like conflict which I realize is a fairly toxic combination. So be it. My contrary odes to culture, art and society are imminent. More, of course, to follow.
Subscribe to: Posts (Atom)


text:
Welcome! Sign in and see what's new since your last visit.
Trendy Creations is a supplier of the latest and most trendy
wholesale handbags and accessories, at the
best wholesale prices. We specialize in wholesale handbags, wholesale handbags and purses,
wholesale fashion handbags, designer inspired purses, cheap wholesale handbags and purses,
wholesale purses, wholesale belts, wholesale fashion jewelry, wholesale accessories,
celebrity handbag, wholesale designer handbags, wholesale leather.


text:
Found this one, which may be useful.
Found this one, which may be useful.
That's a really interesting one; thanks for the link!
Cavaliers: Tansy : Mindy Connie Roxy Neasa Gus
In memory: My beautiful Jaspar Lucy Leo Lily Libby
They have some brilliant leads and harnesses on here, designed to help avoid spinal injuries and train dogs to stop pulling.
Although expensive, they should be long lasting, so a good investment.
If you're in the UK, at the moment the shopping cart isn't working properly but if you e-mail, they will sort it out for you and send it.
Will let you know how we get on!!
Nicki and Kayla (Shih Tzu )
Supporting www.rupertsfund.com and www.cavaliermatters.org
What have you bought then Nicki?????
I've been really naughty Donna ...lots of money but I hope it's going to be worth it.
Im struggling with managing all 3 as I have to have them all on the same side. I have a lead divider for two, but the third gets tangled.
SO I've ordered the Triple Lead System. It can be used for all 3 at once, or breaks down into 3 separate leads.
I think it will be better for Trevor too WHEN he walks them!!
Although they don't pull that much, when they do, they are really strong and I'm worried about Roop and TedBear pulling anyway, for obvious reasons!!
It will take a few weeks to make up and send, will let you know when it arrives!!
It's this one:
Nicki and Kayla (Shih Tzu )
Supporting www.rupertsfund.com and www.cavaliermatters.org


text:
Join us for a gathering of representatives from numerous SPS departments. Use this time to ask questions, collect information, and learn face-to-face from the people who help coordinate services to support your student. Special Education Directors and other staff will be onsite during this open-house style event as well, so bring your questions! Childcare will be provided.
If you require translation or interpretation services for this event, please email firstname.lastname@example.com.
Special Education Resource Fair
Tuesday, January 22, 6:30 - 8 p.m.
South Lake High School Commons
8601 Rainier Ave. S. Seattle, WA 98118
Do you want to delete all occurrences of the recurring appointment "Special Education Resource Fair", or just this one?
Delete this occurrence.
Delete this series.


text:
Create a Ning Network!
This reply has been deleted. Return to the discussion.
Welcome toTennisopolis : Tennis Social Network
Sign Up (free)or Sign In
© 2019 Created by Mark / The Mayor.
Powered by
Badges |
Report an Issue |
Terms of Service
Please check your browser settings or contact your system administrator.


text:
Bing Ad Credits
Find new customers and expand your business
Get $100 in Bing Ads credit with your paid hosting plan.*
Get $100 in Bing Ads credit to advertise to your customers searching on Bing. With a Bing Ads account, you'll be able to:
- Put your business front and center for new customers searching on the Bing Network. Set your budget and don't pay unless someone clicks on your ad.
- Expose your business to customers at the moment they are ready to buy.
- Bing Ads can help target the right audience to create new leads. A Bing Ads campaign is affordable and customizable. Your ads appear on the Bing Network.
Sign up today and draw more customers to your website with ads on the Bing Network.
You have a $100 Bing Ad Credit.
*Offer Details: Offer expires January 15, 2020. Get $100 in Bing Ads credits with your paid hosting plan and for signing up as a new Bing Ads customer. A new Bing Ads customer is one that has not advertised on Bing Ads before. The Bing Ads customer will receive a promotional code to redeem credits. Limit one (1) promotion code per new Bing Ads customer. Promotional code must be redeemed within thirty (30) days of Bing Ads new customer creation. Ad campaign costs accrued before receiving a credit, as well as costs accrued after all credits are used, will be charged to the payment method associated with the Bing Ads account. Ads will continue to run and accrue costs after any promotional credit has been used up. Any portion of the credit not used within ninety (90) days of credit redemption will expire and can't be carried over even if the Bing Ads Customer switches their payment method. Offer valid only to residents of the United States and Canada. In order for the offer to be valid, a form of payment must be entered into your account prior to redemption of the promotional code and prior to your account going live to take advantage of the credit. This offer may not be combined with any other offer, promotional code coupon or discount, separated, redeemed for cash, transferred, sold, or bartered. Microsoft, in its sole discretion, can close your account for any suspected coupon abuse. See Bing Ads Terms and Conditions for more details at sign-up. Other terms and conditions may apply.


text:
Press the down arrow key to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.
Press the down arrow key to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.
Set on Damen Ave, this hostel couldn't be any closer to the neighborhood's cache of hipster shops and eateries. The rooms hold one to 12 beds in various dorm and private-room configurations. The flimsy metal bunks and thin-walled bathrooms don't seem to deter the young global backpackers, who head up to the viewtastic rooftop deck to grill, drink and socialize.
Freebies include a DIY pancake breakfast, wi-fi and a game room with Wii and foosball. The social hostel organizes frequent outings. There's limited parking for $10 per night.
IHSP members can save 10% off our lowest rates!
We\\\'re the best-located hostel in Chicago! Wicker Park is youthful area full of dive bars, shops, awesome places to eat, and amazing articheture.
Our hostel features a large and social common room with fully equipped kitchen as well. Our staff also takes guests on free pub crawls around Wicker Park.
Only hostel In Chicago with a 24 Hour Roof deck where you can socialize all night long!
We offer private, hotel-type rooms which sleep up to eight people, with male and female dorm beds and private rooms with shared bathrooms. The rooms have all-new beds and furniture, new rooms and bathrooms.
Parking is available; please call or email in advance to reserve. *Please note that our parking is very limited and must be reserved in advance. Our parking is $10/night +tax for each car.
Our free facilities include free Wi-Fi and Internet, free linen and towels, free coffee and tea all day and free lockers and luggage storage. We also have a free concierge service, including discounted tickets. Coin-operated laundry is also available on-site.
Discounted bike rentals are available but must be reserved in advance. Our contact information will be in your booking confirmation email.
Wicker Park is one of the best neighborhoods in Chicago for nightlife, restaurants, bars and shopping. Downtown is great for sightseeing but Wicker Park is where you will want to spend all of your time. You can literally see the trains on the blue line as they pass by a block away. Wicker Park is the hippest place in Chicago and is only two stops from the city center and five stops from the Willis (Sears) Tower and Union Station.
Make the right choice in your travels and try out IHSP Chicago Hostel, located in the famous Bucktown/Wicker Park neighborhood directly on the Damen stop on the blue line. We are not one of those hostels that charges you for everything, you will feel at home here.
Please note that we do not accept local guests. You must show a passport or out-of-town ID. USA Citizens: You may not stay in our dorms unless you have a student ID and a travel itinerary.
Please read our Things to Note below before making a booking.
We have a 48 hour cancellation/modification policy. Late cancellations and no-shows will be charged the equivalent of the first night\\\'s accommodation.
You must be 18 years old or older to stay in shared dorm rooms. Minors must be accompanied by an adult 18 years or older.


text:
0 Members and 1 Guest are viewing this topic.
After all this, someone'll probably come along and say these are Scandinavian! :lol:
I bought two similar dishes today, one with label.Whole ThingLabelPip - these look flatter than yours, but the points look exactly the same. Looking at the auction for the taller one described as dartington, the points on that one look slightly different?Having googled, I haven't found anything about the company.
Page created in 1.994 seconds with 27 queries.