Posted by Chris Alcock on 28 Feb 2011 | Tagged as: .NET, Development, Morning Brew
I’m over in Bellevue, nr. Seattle, WA this week for the MVP Summit 2011, so if you are in town for the event, or a local and fancy meeting up give me a shout on Twitter (@Calcock). I spent Saturday morning helping out at North West Harvest at the GeekGive community event, where I had a great time packaging green beans destined for those in need in Washington State, and was captured on camera sporting interesting head gear by Barry Dorrans (thanks for that Barry ;-))
- jQuery 1.5.1 Released – The jQuery Team announce the release of jQuery 1.5.1, a minor bugfix release on top of the 1.5 major release. The final edition of this release is now available bot for direct download and also on the Content Delivery Networks from Microsoft and Google.
- Announcing a new Free Windows Azure Platform Trial offer – Eric Nelson highlights a new Trial Offer from the Windows Azure Platform. This trial now includes an increased compute hours allowance (750 hours) along with 500mb of data transfer in and out, 500mb storage, 10000 storage transactions, 100000 AppFabric Access Control transactions and a 1gb Web Edition SQL Azure database. This trial offer runs through to 30th June.
- Phoney Windows Phone 7 Project Now Available! – Shawn Wildermuth announces Phoney, a Windows Phone 7 project template which contains a selection of his helper classes for working with Windows Phone 7. Available on CodePlex and also as a NuGet package, Phoney contains a number of controls, converters and helpers for common Windows Phone features, and this 0.1 release includes ObservableObject, PhoneLogger, FadingMessage and BitlyHelper classes.
- Never Say Never, Part Two – Eric Lippert takes us on another adventure exploring how compilers know if a method will ever exit, looking at cases which can confuse compilers, and exploring the power of a compiler which could accurately identify methods which exit without returning in solving and an all mathematical problems
- Reimplementing LINQ to Objects: Part 45 – Conclusion and List of Posts – Jon Skeet wraps up his epic series on re-implementing Linq to Objects with a summary and table of contents linking to all the posts in the series. If you’ve not ben following this one as its been being posted now would be a great time to catch up with a facinating read (just allow yourself plenty of time).
- C# Compiler as a Service Update – Miguel de Icaza gives an update on the feature level of the Mono C# Compiler as a Service library showing how it is now capable of working with full class definitions in addition to its ability to evaluate expressions and statements,
- How To Find Out Which NuGet Packages Depend on Yours – Phil Haack discusses the dangers or renaming a packages ID in NuGet, and looks at how it is possible to identify if other packages rely on the ID of your package as a dependency using the power of the OData feed.
- New features in WebActivator 1.3 – David Ebbo discusses the enhancements in the WebActivator NuGet Pacakge which allows packages to introduce source code which runs on application startup to the project when they are installed, looking at support for code after Application_Start, support for Code in App_Code, and the use of start methods outside ASP.NET, all included in V1.3.
- .NET Client Profile Support in NHibernate 3 – James Kovacs discusses the lack of .NET Client Profile support in NHibernate 2.x, and looks at how introducing this support into NHibernate 3 (and similarly in your own applications) is not as simple as it might seem.
- Covariance and contravariance in .NET 4.0 – Matt Harrington shares an 8 minute screencast based on a presentation he gave at the San Francisco Bay .NET User Group last year on Co- and Contra- variance in .NET 4
- Design Patterns Series: The Decorator Pattern (with a real-world soccer example!) – Max continues his series of sport themed examples of Design Patterns with a look at the Decorator Pattern using an example from the world of Soccer (or Football if you’re from my part of the world)
- Tests are your airbag – Krzysztof Kozmic discusses the importance of having a good test suite in allowing you to work quickly, easily and safely with code, highlighting the importance of the concepts of when and why in testing as well as what code you are testing.
- ASP.NET MVC Ajax CSRF Protection With jQuery 1.5 – Justin Etheredge looks at implementing Cross Site Request Forgery protection for his Non-POST ajax calls, borrowing functionality from the ASP.NET MVC 2 source, and implementing client side code in jQuery
- An Afternoon With Glenn Block – Scotish Developers welcome Glen Block for an afternoon event on Saturday 12th March at StormID’s Leith Offices on the edge of Edinburgh, where Glen will be delivering a session on his current work, followed by an chalk and talk Question and Answer session on anything you fancy.
- Save the Date – Windows Phone 7 Tech.Days Online Conference – Mike Ormond highlights the plans for a Windows Phone UK TechDays online event on Thursday 24th March which will feature two tracks, one focusing on Silverlight for Phone and the other on XNA. The event will be running from mid afternoon (3pm) until late evening (8:30pm) both GMT, and features a great looking lineup of topics and speakers
- Writing about Windows Phone 7 Development – Mike Ormond is alos looking for willing authors to help contribute to a free e-book on Windows Phone 7 Development. There is a proposed outline of the book, and Mike is looking for further volunteers to contribute sections towards it, already with a good uptake. This is a great opportunity to get involved in a valuable community addition.
- How to decrease risk when designing integrated systems with Sarah Taraporewalla – Canary Wharf .NET User Group – The Canary Wharf .NET User Group welcome Sarah Taraporewalla for a session on reducing the risks involved in working on systems which connect to other systems on Wednesday 2nd March
Comments Off on The Morning Brew #801
Posted by Chris Alcock on 25 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- Reimplementing LINQ to Objects: Part 44 – Aspects of Design – Jon Skeet continues his epic series on reimplementing Linq To Objects. In part 44 of the series Jon discusses ome of the design questions that arise in Linq to Objects, discussing composability and immutability, Extension methods on interfaces, the use of delegates, lazy execution and naming.
- Foundations of Programming 2 – Chapter 5 – Effective Testing – Karl Seguin shares the next chapter of his Foundations of Programming Second edition. This chapter looks at testing, discussing what makes for good tests, takes a look at mocks and stubs and integration testing, with illustrative examples along the way.
- Task Parallel Library : 3 of n – Sacha Barber continues his series exploring the Task Parallel Library, examining the parallel for / foreach loops, how you handle cancellation and exceptions, how partitioning can help improve performance, and the use of Thread Local Storage with TPL.
- Code Behaviour via Unit Tests – Dewald Galjaard discusses the importance of having your unit tests test the behaviour of the code and not the implementation, spured on by a real world car related experience, and aided by a Code equivalent.
- How much traffic does your website create with each request? Use IISExpress 7.5 to find out. – John V. Petersen takes a look at IISExpress’s console interface, looking at setting up your web apps to use IIS Express in Visual Studio and looking at some of the useful features of IIS Express.
- Introducing Data Annotations Extensions – Scott Kirkland takes a look at the Data Annotations Extensions project which addes11 further annotation attributes to the basic 4 provided by the framework.
- Custom Data Annotation Validator Part I : Server Code – & Part II: Client Code – K. Scott Allen looks at how you can implement your own custom annotation validations both on the server side and also in client side code using jQuery.Validate
- Europe Virtual ALT.NET: Recording of Matt Yoho on Ruby for Static Language Developers @ E-VAN 22 February 2011 – Jan Van Ryswyck posts up the recording of this week’s European Virtual Alt.NET presentation by Matt Yoho on Ruby, looking at the object model, duck-typing, modules and other features of the Ruby Language.
- NxtGenUG – Real World Dynamic C# – The Manchester / Warrington NxtGenUG welcome Mark Rendle on Wednesday 16th March for a session on the dynamic support in C#4, looking at where it is particularly useful, and exploring the use of it in his IronMock and Simple.Data projects.
- NxtGenUG – Raven DB gives RDBMS the bird – The Hereford NxtGenUG host Rob Ashton for a session on the RavenDB document database, exploring what document databases do better than their relational cousins. The event is on Monday 14th March at Shire Hall.
Comments Off on The Morning Brew #800
Posted by Chris Alcock on 24 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- 36 Hour Free Offer: jQuery Fundamentals Training – Scott Guthrie highlights an offer from Pluralsight giving you free access to their jQuery Fundamentals online training until 9pm PST on Thursday (24th). This 5 hour training course from Dan Wahlin is broken into 5 sections, most slightly longer than an hour, and jQuery basics, Selectors, DOM interaction, Events and Ajax.
- Flatten your architecture: Simplicity as a core value – Ayende discusses how a seemingly well structured yet complex application architecture which follows SOLID principles isn’t always the best thing when it comes to reading data (and tuning for performance)
- Thinking about the user, or ‘How to consider the experience’ – Kyle Baley discusses the importance of, and difficulty in creating a good consistent User Interface for your application, how it takes considerable work to achieve, but is well worth the effort.
- Random Ravings of a Red Headed Code Monkey: Creating the FSPowerPack.Community NuGet Package – Daniel Mohl runs through the process he went through to create the NuGet package for the FSPowerPack.Community project. While this article is about creating an F# package the general principles apply across all NuGet packages
- Storing non-content data in Orchard – Bertrand Le Roy explores how you can store your own data structures using the framework provided by the Orchard CMS which includes migrations support for the data structure.
- Subterranean IL: Exception handler semantics – Simon Cooper continues this series looking at the details of the .NET Intermediate Language, exploring in detail the use of Filter and Fault exception handlers, and looking at their possible equivalents in try / catch syntax
- Asp.Net MVC Model Binding -Part1 – ‘corol1234′ begins a back to basics series looking at the Model Binding functionality of the ASP.NET MVC framework, showing a working sample (with source available) which illustrates Model Binding in use.
- Brighton ALT.NET show and tell night videos – Mike Hadlow shares the videos (recorded and uploaded by Keith Bloom) from the recent Brighton Alt.NET show and tell evening event. These 5 videos give a flavour of the wide and varied interests of this group, and, if you are in the Brighton area, will hopefully encourage you to get involved.
- NxtGenUG Hereford- Jon Skeet goes evil with c# – The Hereford NxtGenUG welcome Jon Skeet for a session on some of the evil and complex code that the C# compiler has to deal with, looking at some of the more advanced C# features such as anonymous types, expression trees, dynamic binding and much more. The event is on Friday 8th April at Shire Hall in Hereford.
- jQuery Manchester Meetup – The Manchester (UK) jQuery User Group are meeting on Tuesday 8th March at Manchester Digital Laboratory where Jon Vines will presenting a live coding session on Navigation, and DJ Adams will be giving a session on JSON and JSONP for Ajax data retrieval.
- NxtGenUG Oxford – Say Yes to IIS – Andy Westgarth visits the Oxford NxtGenUG on Tuesday 8th March for a session on Internet Information Services (IIS) 7.0 , looking at the significant differences from previous versions and new features to help developers develop, release, diagnose and debug their web based applications.
- Live Webinar: How to AppFabric Enable Your Apps with PostSharp + Gibraltar – Gael Fraiteur of SharpCrafters is joined by Kendall Miller of Gibraltar Software and Brian Prince of Microsoft in a live webinar on Thursday, February 24th at 10:00am PT where they will be discussing implementing AppFabric Caching using a combination of PostSharp and Gibraltar. Registration is required to access the live meeting.
Comments Off on The Morning Brew #799
Posted by Chris Alcock on 23 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- ASP.NET mvcConf Videos Available – Scott Guthrie highlights the availability of all the session video content from the recent mvcConf virtual community event which covered all things ASP.NET related. This lists of sessions contains a vast number from very recognisable names in the community and will be a great resource if you missed the actual event.
- Pair programming – The Good, The Bad and the Ugly – Canary Wharf .NET User Group – The Canary Wharf .NET User Group welcome Rachel Laycock and Sara Stephens with their session on Pair Programming on the evening of Wednesday 2nd March. This talk was well received at a recent new speakers event at the London .NET UG so should be well worth seeing.
- NxtGenUG Oxford – .Net on a chip! – The Oxford chapter of the NxtGenUG welcome Ryan O’Neill to their group on the evening of Tuesday 1st March for a session looking at the .NET Micro Framework and the hardware available to run it.
- From Zero To Deployed Contest – Prizes Announced – Rob Reynolds, following on from his look at AppHarbor, is running a video/screencast based contest going from no code to a working database backed application deployed and running with some great prizes for best video and best time
1 Comment »
Posted by Chris Alcock on 22 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- Two Caliburn Releases in One Day! – Rob Eisenberg announces the release candidates of Caliburn 2.0 and Caliburn.Micro 1.0, his client frameworks for WPF, Silverlight and Windows Phone 7.
- Kinect for Windows SDK to Arrive Spring 2011 – Yesterday Microsoft announced that there will be a release of the Kinect for Windows SDK this spring, available to academic and enthusiasts to interact with the Kinect sensor and audio subsystems.
- Never Say Never, Part One – Eric Lippert explores the ability to assign lambda expressions to delegates, looking at the rules that govern this ability, as well as looking at an example lambda which can be assigned to all Func<T> and Action<T>
- Changing Base Type Of A Razor View – Phil Haack explains how you can create your own base object for a Razor view page, allowing you to implement custom functionality and have it available in your views
- Archaeopteryx – Vittorio Bertocci shares his thoughts on the non-release of CardSpace 2.0, and how Claims Based Identity is still a powerful technique even in light of this announcement.
- Task Parallel Library : 2 of n – Sacha Barber continues his series on the Task Parallel Library with a continuation of the discussions of the background to the TPL and exploring Continuations and Cancelling Chained Tasks
- NuGet – Functional Tests – David Fowler gives a tour of the Functional tests for NuGet, powered by PowerShell, discussing how the tests are structures, and the capabilities of their PowerShell testing framework
- jQuery 1.5 Visual Cheat Sheet – Antonio Lupetti shares a nice looking 4 page Cheat Sheet for jQuery 1.5 touching on all the key areas of the jQuery API with simple explanations of the methods available.
- Code Review Guidelines: Avoid inheritance for properties – Ayende shares some sample code and discusses why its use of inheritance for providing common properties is an antipattern, showing the same code how he would prefer it to be structured.
- Webinar: Building Document Based Systems – Ayende will be presenting a DevExpress Channel Webinar on using RavenDB to build document based systems in .NET, exploring the different styles of modelling and their benefits and disadvantages. The Virtual Event takes place on Thursday 24th Feb 24 4:00 PM – 5:00 PM GMT
- NxtGenUG Essex Launch Event! – The NxtGenUG welcome Guy Smith-Ferrier and Dave McMahon tomorrow night (Wedsnesday 23rd February) for the inaugrial Essex NxtGenUG meet. Guy will be delivering his session on Windows 7 Multi Touch support, and Dave will be delivering a NxtGenUG welcome session.
- Book Group: ‘Coders at Work’ by Peter Seibel (part 1) – The Cambridge Developers’ User Group book group will be meeting this Thursday (24h Feb) for a session exploring the first 5 Chapters of ‘Coders at Work’ by Peter Seibel, discussing the work of Jamie Zawinski, Brad Fitzpatrick, Douglas Crockford, Brenden Eich and Joshua Bloch.
- Coding under pressure with TDD/BDD #NUnit and #Specflow Workshop/Seminar – The Cambridge Developers User Group are also meeting this Saturday for a morning of exploring Test Driven Development and Behaviour Driven Development using NUnit and SpecFlow. The event starts at 9:30 and offers two tracks of content – sounds like a really good event.
- Your Chance to Win 1 of 50 Licenses for Red Gate’s .NET Reflector Professional – Fellow link blogger Alvin Ashcraft offers his readers the chance to win one of 50 licenses of RedGate Reflector. All you have to do to enter is tweet or comment on a blog post.
Comments Off on The Morning Brew #797
Posted by Chris Alcock on 21 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- Validation Application Block ported to Silverlight – Grigori Melnik highlights the availability of a code drop of the Enterprise Library 5.0 Silverlight Integration Pack which includes a new port of the Validation Application Block to Silverlight
- jQuery 1.5.1 RC 1 Released – The jQuery team announce the release of their first Release Candidate of jQuery 1.5.1 the first update to jQuery 1.5. This release includes a vast array of bugfixes and minor improvements.
- WebMatrix refresh released – The Microsoft Web Platform Team announce a minor update to WebMatrix which is available through the Web Platform Installer, and includes a number of fixes to user reported bugs since the release in January.
- Needle Dependency Injection Container – Alpha 0.1 version released – Damian Schenkelman announces the first alpha release of Needle Dependency Injection Container, available as a NuGet package, this light weight dependency injection container started off as a weekend project and over time has grown into a usable DI container including Property and Constructor Injection, a Fluent API, Func<> injection and lifecycle support.
- Routing Regression With Two Consecutive Optional Url Parameters – Phil Haack highlights a regression introduced in ASP.NET MVC 3’s routing support where a route has two consecutive optional parameters. In this post Phil examines the problem, shares a work around and looks at the root cause of the problem.
- Html.Awkward – K. Scott Allen looks at some of the confusing aspects of the many overloads of the HML Helpers in ASP.NET MVC, illustrating how some of them can result in output that is not how you would expect.
- Reimplementing LINQ to Objects: Part 43 – Out-of-process queries with IQueryable – Jon Skeet continues his excellent series on the reimplementation of Linq to Objects with a look at the more complex topic of IQueryable implementations, giving some of the background, and exploring the use of Expression Trees.
- Massive Update Number 1 & Update Number 2 – Rob Conery gives two updates on his ironically named and ever shrinking data access library ‘Massive’, discussing the implementation of a variety of new features such as transactions, paging, stored procedure support and inheritance, as well as keeping a close eye on the number of lines of code.
- Malware on ThoughtWorks Websites – Martin Fowler discusses the recent problems that Thought Works have had with a Malware infection on their webservers, talking about the steps they have taken to investigate and remove the infection, and recommending that anyone on a Windows PC who has visited their sites recently be sure to check their machine for Malware.
- Code Metrics, Reporting, and XSLT Debugging – Cameron Skinner shares an XSLT and CSS file which will transform the output of the CodeMetrics Power Tool into a nice HTML report
- Call For Speakers – DDD South West 3.0 – The session submissions process has now kicked off for Developer Developer Developer South West to be held on
Saturday 11th June 2011 at The University of West England, near Bristol. The session submission is open until Tuesday 222nd March, so if you are interested in delivering a session at a very friendly conference this is a great opportunity
- NxtGenUG – Event: It’s a DRY old Do … – The Cambridge chapter of the NxtGenUG welcome Mark Rendle to Microsoft Research in Cambridge for a talk on the DRY principle (Don’t Repeat Yourself) in C# and Functional Programming in C#. This event is tomorrow evening (22nd Feb).
- Want a free seat for my TDD class in march? Propose a challenge – Roy Osherove will be running his 2 day Test Driven Development in .NET class at Skills Matter next month, and is giving one place on the course away for free on his blog
Comments Off on The Morning Brew #796
Posted by Chris Alcock on 18 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- ILSpy – Development of a free replacement for Reflector now that it is becoming paid software are underway, and the ILSpy project are well underway with releasing their latest binary, and already its looking like a good replacement in your free toolbox.
- ReSharper 6 Bundles Decompiler, Free Standalone Tool to Follow – JetBrains also enter the market with a replacement for Reflector, initially as a feature which will be included in ReSharper 6, with a standalone (and free) edition coming in the near future
- Introducing the February 2011 Silverlight for Windows Phone Toolkit – Jeff Wilcox highlights the February 2011 release of the Silverlight for Windows Phone Toolkit, available on CodePlex now. This library contains a collection of controls for use in your applications including a new Tilt Effect and PerformanceProgressBar, along with performance improvements and more general improvements across the library.
- Updating and Publishing a NuGet Package – Plus making NuGet packages smarter and avoiding source edits with WebActivator – Scott Hanselman takes another look at NuGet, exploring the process involved in updating an existing NuGet package, and explores the WebActivator functionality to run some of your code on application startup.
- Looking inside a double – Eric Lippert shares some code which uses the Rational class from the Microsoft Solver Foundation to split out the individual bits which represent a double precision floating point number
- Monads in C#-8. Video of my DDD9 Monad talk – Mike Hadlow continues his series on Monads in C# with a video interlude, sharing the video of his session on Monads in C# delivered at DeveloperDeveloperDevelop 9 in Reading last month.
- Asynchronous Web and Network Calls on the Client in WPF (and Silverlight and .NET in general) – Pete Brown takes a look at implementing Async calls between a WPF client application and an ASP.NET web application using the Silverlight-Enabled WCF Service, stepping through the work necessary to illustrate, and also exploring the use of the Reactive Extensions
- Longs for 64-bit Applications, and Other Interviewer Gems – Rob Conery discusses the probably impact of Scott Hanselman’s New Interview Questions for Senior Software Engineers list, and shares some tales of bad interviews and code-reviews he’s experienced
- What IE9 Changes Could Impact Your Site – Jon Box discusses some of the changes in Internet Explorer 9 which may break your sites, and highlights the Internet Explorer 9 Compatibility Cookbook, a guidance document from Microsoft which looks at some key areas of concern.
- A Guide to Deploying RIA Services Solutions – Brad Severtson discusses the deployment of WCF Rich Internet Applications Services projects offering guidance on this much requested area, sharing a part of the documentation of the forthcoming RIA Services SP1 documentation.
- Designing for the future – Dennis Vroegop discusses the evolution of the User Interfaces, taking a look at how things have changed in the Windows Space since Windows 95, iTunes, and other more general design principles.
Comments Off on The Morning Brew #795
Posted by Chris Alcock on 17 Feb 2011 | Tagged as: .NET, Development, Morning Brew
- Moonlight 4 Preview 1 is out – Miguel de Icaza announces the release of the first preview of Moonlight 4, the Mono Project’s implementation of Silverlight for Linux. This preview release brings some of the features of Silverlight 4 to the Moonlight platform, with more still to come.
- Three Months and Ten Days – Miguel also highlights the release of Mono 2.10, the latest evolution of the Mono platform which now includes a new profiler, VB.NET support for V2.0 and v4 profiles, performance improvements in SGen, Cecil, support for ASP.NET MVC 3, a new C# compiler backend, and lots more.
- Windows 7 SP1 RTM available for MSDN and TechNet customers – SQLDenis highlights the release of Windows 7 (and Windows 2008 Server R2) Service Pack 1, available now to TechNet and MSDN Subscribers. General availability will be on 22nd February 2011.
- Free WPF controls from Mindscape! – The folks over at MindScape have released three controls available for free which target WPF Developers. The Controls, (Coverflow, AutoCompleteBox and PromptDecorator) have been released to celebrate the release of their commercial controls library WPF Elements 4.0.
- Massive: 400 Lines of Data Access Happiness – Rob Conery talks about his simple Dynamic based data access library, implemented in 400 lines of open sourced code (also available as a NuGet package). Rob discusses the key design choices made in the development of this library in this very interesting post.
- Unit of Work in Rich Clients – Paul Stovell takes a look at the Unit of Work pattern, and how you should implement it in Rich Client applications, briefly discussing the implementations in Linq to SQL, Entity Framework, and NHibernate, along with discussing how this can fit in with MVVM frameworks.
- Get/Load Polymorphism in NHibernate 3 – James Kovacs takes a look at the polymporphic behaviour of NHibernate 3 in loading objects which are part of an inheritance graph, discussing some of the limitations of its support.
- Notes on Building Razor Views – K. Scott Allen explores the building of views implemented in Razor to help you identify syntax errors in the view at build time rather than runtime, walking through the process of enabling this feature.
- Caching items in Orchard – Bertrand Le Roy shares a look at the Orchard Open Source CMS project’s cache API, which is built on top of the standard ASP.NET cache, but gives a nicer developer experience.
- Using Windows Azure AppFabric Cache (CTP) – Panagiotis Kefalidis explores the Windows Azure AppFabric Cache, looking at the CTP release, and stepping through configuration and utilisation of the cache from your code in this CodeProject article.
- SQL Azure Reporting Limited CTP Arrived – Shaun Xu takes a look at the CTP release of SQL Azure Reporting walking through using it for the generation of a simple report.
- AppHarbor – Azure Done Right AKA Heroku for .NET – Rob Reynolds highlights AppHarbor, a cloud based hosting, akin to Azure, but actually running on Amazon’s cloud offering. Where AppHarbor excels is in its deployment support, allowing you to deploy your application by pushing directly from your version control system much like Heroku.
- 5 Ways That Postsharp Can SOLIDify Your Code: Caching – Matthew Groves continues this 5 part series looking at how PostSharp’s AOP functionality can help you achieve SOLID code. In this part, Matthew takes a look at implementing caching
- IE9 No-Reboot Setup and the Windows Restart Manager – Eric Lawrence takes a look at how the Window Restart Manager makes it possible for IE9’s setup to not require a Reboot, and looks at how you can make your applications work with the Restart Manager.
Comments Off on The Morning Brew #794
Next Page »