I've loved Ace[^] forever. It's one of those pieces of code which, when I first saw it in action, I couldn't even begin to think how they managed to do it in a manner that didn't bring the entire browser to its knees. But it works and it works very, very well.
I'm happy to announce that after a cold, lazy evening, a few Google searches, some beer[^] and a bit of swearing I've added Ace as the Source editor to our online WYSIWYG editor for articles.
Editing articles is meant to be a WYSIWYG affair but it's never the case with HTML. Us control freaks always want to dig into the markup and make it just right. With Ace we now have that markup syntax colourised which helps enormously when your article's getting a little long. On top of that we get line numbers, tag matching, and real-time validation.
Of course, if it's just not working for you there's an "ace" button next to the "Source" button that allows you to deactivate Ace if it's causing problems.
Our article voting system has evolved progressively. From one person, one vote to a weighted system, to requiring comments when down-voting, to a system that statistically removed junk votes, and then lately to a system that recognised that voting patterns are not only bell curves, but sometimes, legitimately, bimodal.
We have, to a large degree, been successful at suppressing malicious down-voting. Too successful, it seems, and the article voting system is now massively weighted towards up-votes rather than down-votes. To up-vote you merely click the 4 or 5 rating. To down-vote you need to add a comment, and if your down-vote doesn't agree with the majority then your vote may not be counted until a sufficient number of other members have likewise voted the article down.
So while up-voting is great in that it rewards authors and gives readers a way to say thanks, up-votes are bad when the up-votes are not votes based on the technical merit of an article but instead based on being the author's friend, family or colleague. Make it 50 friends, family members or colleagues and the vote for a given article is hopelessly invalid.
Basically: you can have too much of a good thing. It's easy to up-vote, hard to down-vote, and so the average article rating goes up and the ability to sort the wheat from the chaff goes down.
Starting today we're removing a barrier on down-voting. You are no longer forced to provide a comment when down-voting. We have our historical-based expectations on what will happen but will be monitoring the results closely just in case.
The change is effective as of now. As always we're open to suggestions and ideas to make it even better.
We have an occasional issue whereby an author will get their friends, family, colleagues, and random people off the street to vote for their article. Our voting system[^] is geared towards handling a case where lots of people say "this is great" and a few downvoters say "boo, it's crap" by filtering out the outliers on the assumption that the group vote rules.
However, when you have 50 low rep voters saying "it's a 5" and 5 high rep voters saying "this is terrible (or dangerous)" then we need to adjust. The change we've made is that if a certain number of high rep members vote a certain way then no votes of that given score will be filtered out. The naysayers will be allowed to nay-say and balance will be restored.
We are now checking every forum message for spam, and every message that even hints at being spam will be moved to a moderation queue. We won't nuke the message: we leave that dirty work to the top-rep members and protectors. Once the message is approved then it gets posted as a regular message. Those messages that are moderated by a member as being spam will never see the light of day.
We hope this helps with the current challenges, and we'll be extending this to Quick Answers and the Article system as soon as this beta test is complete.
We've had Google, Facebook and LinkedIn login for a while but we're happy to announce that you can now login to CodeProject using your Windows Live ID. Just click the Windows icon at the bottom of the signin dropdown (top right of each page) or the Windows logo on the sign up / sign in page.
We are continuing to enhance releasing api.codeproject.com, our API service for those looking to harness the data and services of CodeProject. Please dive in, check the docs and the samples, and get back to us with any issues or suggestions.
As part of this we're deprecating APIs that haven't been used for years. The specific APIs removed in today's update will be:
Our explorations and experiments with CodeProject are never ending and it’s with a certain sadness that we’re retiring Workspaces and CodeProject.TV.
The creation of new workspaces will no longer be possible from tomorrow, and Workspaces itself will close August 30. Your current Workspaces will be fully functioning until the close of Workspaces.
Workspaces was a framework designed to allow multiple applications to co-exist under the same roof. We started with a Git server (::GitMachine) and a Task management system (::Tasks), then added ::Docs for documentation. The beauty of the system was that since it was designed around APIs it was trivial to have it integrate with CodeProject.com, and trivial to have other applications integrate with Workspaces in turn. Each workspace would allow any number of any of the currently supported applications to be “hosted” within, so you can mix and match and build your workspace system to your liking.
CodeProject.TV was our foray into bite-sized, cost-of-a-coffee video tutorials. Members could create their tutorial, upload it and set their own price. We’d handle the transcoding, hosting, serving, backups, credit card processing and publisher payments, and free videos were just as welcome as pay-per-videos. A simple solution to a number of requests from our users.
We love both, but as we do each year we looked deep in our hearts at what we felt was best for our members and readers and decided that we’d better serve everyone by focusing our resources, and our attention, on CodeProject.com. This means a focus on our members, our articles, and our community. We’ll move our finger down to our next "what if…" item on our endless list of ideas and see where that takes us.
For those who purchased videos or workspaces we’ll be offering a full refund. Even if you tried workspaces for a month and then cancelled your subscription, even if you purchased and watched and downloaded a video we’ll refund your payment.
For those who have files in ::GitMachine or tasks in ::Tasks, we’ll be keeping these two applications running until Aug 30 but effective today no new workspaces can be created. All items in ::Tasks can be easily exported to Excel spreadsheets, and obviously all Git repositories can be cloned to other Git repos.
I kind of expected this with TV. Initially I liked the idea but then found it difficult for me to focus on few minutes of videos to get to some idea/solution compared to an article (with some copy-able code in it ). As you mentioned, onto next idea(s)
A retrospective on TV as well as Workspace would be helpful for future projects.
Maybe it's a generational thing, but I find it difficult to learn by video. I've done a few MVA courses, and while the content is solid, I feel I could learn 2 hours of video in 15 minute of reading, and retain more.
I see YouTube being used for all kinds of lessons and for the most part it doesn't work for me. The exception is very hands-on things like guitar lessons.
Maybe, video might be useful for more complex items or difficult to understand topics. async/await was confusing for me, and it was helpful for me to view few videos with the code samples downloadable at a different URL.
Nice idea in principal, but personally I found the TV was harder to watch than just getting the information from an article.
I never used the Workspaces - I suppose that sums up why you're shutting them down.
It's a good thing to occasionally review what you are doing and cut the less useful parts in favour of improving the more useful parts. Well, and bravely done.
- I would love to change the world, but they won’t give me the source code.
Codeproject.com is always being in my priority list of site for learning. Now i was transfer my all projects to workspace but... the idea of workspace with application like multiple GitMachines, Task and Document is really great and that make it easy to take decision to buy workspace.
Well, but if it is good for codeproject team then we will welcome that.
Be unstoppable to achieve the good you want to achieve.
Although I haven't been active in either venture, simply because I no longer code for a living, I really enjoyed both features. I was kinda looking forward to getting back into programming once I am retired in a few years, and had planned to utilize both.
I'm sorry to see them go, but I hope you'll continue to experiment!
Sorry to hearit. The workspaces inspired me to move my project to Open Source, and I liked the way it worked. I was really looking forward to creating a CodeProject article that was tied to actual code. Que sera sera. Thanks for the fun run while it lasted!
Chris, I thank you for your prompt and quick refund of the Workspaces registration fee. I found out about Workspaces' demise (and found this article) when PayPal emailed me about the refund. That's rare. While I'm sad to see Workspaces go, I appreciate the integrity in how you handled its "retirement."
I was a bit perplexed when I got a refund on PayPal today. Workspaces had a lot of merit and I got it. I was planning to move In with my next article I'm slowly working on. The news comes as a mixed bag to me now, and I'd like to expand.
I've been a long time fan of CodeProject. I can't begin to count the number of times I've needed a "Hint", or a quick "How to" over the years and found the answer here. While the service is free, I really wouldn't mind paying something. I saw having a "Professional Workspaces account" as just that for the few months while you were in BETA.
While I'm no marketing expert, as a consumer, Code Project does need something to quench my inner guilt for getting so much for nothing, and I'm sure others do too.
I think a good model of what I'm talking about is reddit. As you may know, having a "Gold" account really doesn't do much but put a badge on your profile, give you access to one single private reddit, allow you to turn off the side bar ads, and allows you to get more posts comments per page load. That's about it. The funny thing is I don't turn off the ads because I like the messages you get when you don't.
Long story short - Not much different than the free, and they've monetized my membership for about $50 dollars a year. I also can purchase "Gold" to give away to other members. While these things don't do much, they do help build a sense of community and offer a way of saying "thanks" with a small monetized gift token to someone whose helped you out.
So here's my advice - take your Alien (I believe you all were first with the alien, right?) and paint him yellow or "gif" him up so his arms wave and he's jumping for joy - Anything - And tell me I can have him on my profile for 2 to 5 dollars a month, 20 - 30 dollars a year (29.95???) And I'll buy him for the bragging rights.
Just my thoughts.
EDIT: got punchy on the submit button fixed my last two paragraphs - sorry.
"If you've got to make code changes in something you didn't write, tread lightly. Your predecessor was regarded as either a genius or a moron. The truth most likely lies somewhere in the middle..."
I truly appreciate code project, it has been at my aid too many times to count. Workspaces had some distance to get to be a 'github', but I really liked the way workspaces was moving and that I was going to be able to get a group together working on projects in private spaces and then publish articles and making repositories publicly available. (Finally I'd like to have setup publishing to codeplex) Anyway, I understand that sometimes initiatives don't end up being core competencies of their organization and look forward to seeing where your efforts go.
We have no active subscriptions in our Paypal account (all cancelled). You can confirm this on your end by looking in your Paypal account to see if you have any recurring subscriptions set up. Look on the "My Pre-approved Payments" page on your paypal profile.
Codeproject is great for writing and publishing article, github/git is great for hosting code.
Do you ever evaluated some sort of integration?
For example instead of manually uploading a zip file you can provide a way to pull it from a git repo. In this way updating the source code can be really fast and easy.
A similar solution can be provided for article text (a markdown file inside the repository?).
I say this because I hate to always keep up to date my articles on codeproject (cleaning the project, zip it, uploading it, modify the link, ...). Usually I simply put a header that point to the official github repository and I never update it on codeproject.
One of the big issues with having 10M members is names. Everyone has a name, and most want to use their name, or at least something vaguely resembling it. The issue is that Real Names are messy, human things meant for messy human things, and are terrible as a way to label things in a way that makes it easy (for a programmer) to reference that name within text or in a URI. We can't have //www.codeproject.com/members/Chris Maunder because the HTTP spec doesn't allow spaces in URIs, nor can we confidently say Chris Maunder refers to me in text, because it could also refer to someone names Chris who is rambling incoherently[^].
So we have Display names as a way to label your content such as posts and articles, and we have usernames as a way to provide a human readable and programmer parsable handle to your account. //www.codeproject.com/members/chris-maunder as a link to you and @chris-maunder as a reference to you in messages.
You don't need to use @username and you can be safely ignore the feature if it bugs you. However, if you like the convenience then a member's username can be found on their profile page or in the popup that appears when you hover over their name in the forums (assuming you have "Profile Popups" enabled in the forums).
We've finished reworking our caching of forums and articles and are happy to see load times for forums go from half-second to 6 milliseconds. That's beyond what we thought we'd get. Start diving deep into messages from the days of yore and load times don't appreciably change. We've essentially opened up the entire corpus of Forum postings for instant retrieval and slain a number of bugs, thrown out pages of code in the process and reduced our database load by a factor of three. It's almost idling now.
On the article side of things we've improved performance even more and have one final push, after which time we'll hunt down and nuke any remaining load issues.
For a decade we've been working against a local cache on each of the webservers. This meant that we either had to keep the time-to-live short, or we had to work out a sensible way of ensuring that when a member changes an article on one server, and is then directed to another server, they see their updated information - even though the local caches didn't talk to one another.
Yes: distributed caching is a solved problem but there weren't many canned solutions when we started, and we did end up doing some clever things to ensure it all looked sensible, give or take some "expected" caching issues such as a deleted article still occasionally being around for 10 or so minutes. "Expected" really comes does to what is forgiveable, and in this day and age even stuff like that stretches the friendship so we've finally had a chance to bite the bullet, plug up the local cache and add a couple of Redis [^] servers. We're using the ServiceStack Redis client[^] and implemented - fairly easily - a distributed cache that not just solves our cache-sync issues but speeds up application spool up time since the cache is off-server and independent of the webservers themselves. No need to recache on startup - the data's already there.
We are, obviously, seeing our cache load times go up since it's no longer a local cache but requires a network round trip plus serialisation, the overall database load is nicely down and our code is far cleaner.
I was sick of moving between computers, sick of the power outages in our building knocking me off my machine, and sick of having to Remote Desktop from home to my office machine to be productive. I'd setup various machines that would allow me to do the basics when I had to use them (eg for travel) but it's never the same. Like sleeping in someone's spare room - no matter how comfortable it's never quite the same.
I figured that laptops these days were pretty damn powerful and after road testing[^] a couple of Ultrabooks I decided that anything Core i7 with 8GB RAM would be more than enough for me. All I needed was something that would let me install Windows 7, something that was light, and something that had a big, fast SSD.
Enter the mid-2013 Macbook Air. Core i7, 8GB RAM, and the fastest 256GB SSD around.
To cut to the chase: it's an excellent dev machine and is faster than my 4 year old quad i7 desktop. I'm seriously impressed. I'm now able to work on a single machine anywhere in the world without having to compromise by switching to a slower machine for travelling, and I have the added bonus that I no longer need a desktop for the office and a laptop for travel. A single unit does the trick.
The annoying bits
It's a Mac. Apple did not go out of their way to make the Bootcamp experience exceptional. The trackpad sucks in Windows, yet it's by far my favourite trackpad when in MacOS. It's brilliant. Trackpad++ sort of fixes this, though.
I tried using parallels to create a VM from my Bootcamp partition in order to run VS while in the Mac environment. This was great, and you get the proper trackpad experience, but the big glaring issue was that I needed to use a USB DisplayLink adapater to hookup to an external monitor and installing DispalyLink drivers in bootcamp and then running it under Parallels causes the Windows VM to bluescreen. Parallels is aware of the issue and had no plans at the time to do anything about it.
So I stick to Bootcamp or MacOs and never the twain shall meet.
Docking stations became a big issue because I need a lot of screen real estate. I hate cable spaghetti, though, and tried a number of options before settling on an option that gives me almost everyhing for the (ironically) cheapest price: A thunderbolt display.
Thunderbolt displays are expensive. However, they come with a split thunderbolt / power adapter that plugs into the thunderbolt port on one side and provide a power cable to the laptop on the other side. Within the thunderbolt display are a pair of excellent speakers, a webcam, USB 3.0 ports, and gigabit ethernet. It's essentially a fully self-contained docking station built into one of the nicest monitors I've ever used, and with the 27" running 2560 x 1440, it allows me to run VS on one half and SQL MS or Chrome or anything else on the other half in the same manner that I'd previously been using two separate screens.
So factor in the cost of two 19" screens, a docking station ($250 - $300) plus speakers / external webcam + cables and you'll find that a refurbished 27" thunderbolt display is way cheaper, far more convenient and (for me at least) a much nicer experience.
The drawback is that Windows doesn't play well with thunderbolt and you may have to physically shut down your machine before unplugging the monitor if you have the monitor set as your primary display. Further, you need to plug the monitor in before you boot up a windows box because Windows only scans for thunderbolt on bootup. This is really, really annoying.
The only other annoying bit is fan noise. I hammer that poor little laptop and in a quiet room at 2AM when you're building code and running a zillion unit tests then thing really winds up and gets a bit rowdy. I'm still waiting to see what Apple does with the 13" Macbook Pro since a quad core Haswell unit could have a little more headroom before it starts to get hot and bothered - or at the very least it'll be done with it's tasks sooner meaning noise for a shorter time. A retina display would be nice, but totally not needed, but the added weight is a real issue. Touchscreen - while soemthing I've grown to love with the Ultrabooks - is a complete waste for me. The laptop sits by my monitor, closed, while I work. I have no desire to put finger prints all over my big display, and after my experiences with the Perceptual Computing Challenge I know how tired arms get after spending even short periods trying to navigate with your arms up.
Overall a 7/10.
- single machine whereever I am in the world
- excellent setup with the external thunderbolt display
- built in UPS. Love it.
- Totally fast enough.
- Windows issues with thunderbolt connections
- Noisy when hot and bothered
- Did I rally say a computer was "fast enough"? I lied. No such thing.
We skipped VS2013 / .NET 4.5 and jumped straight over to VS 2013 / .NET 4.5.1 because, y'know, it's far more exciting running your production servers on beta software rather than on the boring "tested" stuff.
We're not using any of the fun stuff explicitly, yet, but Matthew has already been eyeing off a bunch of code that can do with some async action. The thing that's most immediate to me is the multi-core JIT and startup time; all cores are actually getting used, CPU usage is up where it should be, and the site spools up much, much nicer than it ever has. Simply getting the advantages of the framework improvements is (almost) enough for me.
The other obvious timesaver is build time: much, much faster than VS2010, even when bogged down with all the other stuff I have open. I'm developing, testing, and running the site on my Macbook Air on Win7. There's the VS IDE, SQL Server Management Studio, IIS running the actual site, Outlook groaning under the weight of a 23Gb pst, various Word docs and spreadsheets, 6 remote desktop windows and half a dozen browser windows and it's all humming along nicely.
Although sometimes (especially during compile time) the humming sounds suspiciously like the Mac's fan is about to attempt takeoff. It gets disturbingly loud.
I'm still not taken with the new VS look - a little harsh, a little lacking on warmth, but it's way faster and, so far, more stable than my old creaking install of VS2010.
As to my experiment with moving my developer life onto a tiny, ultralight laptop: the jury's still out. 7/10 so far.