|
My suggestion would be that this type of audit data should be stored in a database, not in user settings.
The settings are most likely being overwritten because during an update the config is being replaced with the default. You would need to handle this situation during the update and copy the settings. I know the language. I've read a book. - _Madmatt
|
|
|
|
|
Yeah, I do actually store most settings in the database. The guid I referred to has to reside on the machine so I can xref it with the database row that contains the plain english description of the computer, e.g. "the computer over by the water cooler".
I suppose I could have the installer generate the guid and put it in the config file as a permanent entry at install time, but I haven't looked into how to do that. Is anyone doing that?
Re: user settings magically toasted on update:
I agree about copying the settings during the update... but that's what I was hoping to avoid... seems like work. 8^D
To do that, I guess I'd have to figure out a temporary store for them... xml I suppose, but haven't looked into the best way to write my own xml files yet. Any suggestions?____________________________________________________________________________________
The Vulcan Science Directorate has determined that time travel is impossible.
|
|
|
|
|
I wouldn't worry about creating a special GUID to identify the machine, use the MAC address. It will uniquely identify the machine and is less prone to manipulation than an entry ina config file. I know the language. I've read a book. - _Madmatt
|
|
|
|
|
Mark Nischalke wrote: use the MAC address
Excellent suggestion, that's exactly what I will do.
Now what's the laziest way to write a quick xml file? The configuration object? Haven't had a go on that sort of thing yet, always use text files - old school.____________________________________________________________________________________
The Vulcan Science Directorate has determined that time travel is impossible.
|
|
|
|
|
LINQ to XML[^] Look at the section called "The New Way" I know the language. I've read a book. - _Madmatt
|
|
|
|
|
Thanks, Mark
Actually I was able to harvest what I needed from "the old way" because I don't need to reference .Net 3.5 to do it. So far none of my components use that. I've decided to store all my settings, do the update, and restore the settings.
BTW, I noticed a path in My.Settings:
My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData
I wonder if that might be a handy place to throw temp stuff like this.____________________________________________________________________________________
The Vulcan Science Directorate has determined that time travel is impossible.
|
|
|
|
|
Hi,
assuming that is the same as System.Environment.SpecialFolder.CommonApplicationData , normal users won't have write access on modern Windows versions, unless you take special care; see here[^].
|
|
|
|
|
Thanks, Luc
Ou merci!____________________________________________________________________________________
The Vulcan Science Directorate has determined that time travel is impossible.
|
|
|
|
|
You're welcome.
|
|
|
|
|
Hi All
I am fail to install Sliverlight3 tools for VS2008 SP1
Following Error shown in log file
WinHttpDetectAutoProxyConfigUrl failed with error: 12180
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::GetProxySetting) Auto detection of proxy failed, try to retrieve proxy information via IE.
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Retrieving proxy information using WinHttpGetIEProxyConfigForCurrentUser
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Unable to retrieve Proxy information although WinHttpGetIEProxyConfigForCurrentUser called succeeded
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::CreateSession) WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::StartDownload) Session Created
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::StartDownload) Connection Created
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::StartDownload) Request Created
[3/12/2010, 10:51:12] (IronSpigot::WinHttpDownloader::AsyncCallbackInternal) WINHTTP_CALLBACK_STATUS_REQUEST_ERROR error: error=12007, result= 5. Percentage downloaded=-2147483648
[3/12/2010, 10:51:12] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::DownloadUsingUrlMon) Cannot resolve server name (12007) when downloading using WinHttp, try using URLMON
[3/12/2010, 10:51:12] (IronSpigot::UrlMonDownloader::PerformAction) UrlMon download failed with 800c0005
[3/12/2010, 10:51:12] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download failed at attempt 1 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:12] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::UseHttp) Determine the protocol to use
[3/12/2010, 10:51:12] (IronSpigot::BitsDownloader::InitializeBITS) Failed to COCreateInstance BackgroundCopyManager : hr= 0x80070422
[3/12/2010, 10:51:12] (IronSpigot::BitsDownloader::InitializeBITS) Failed to COCreateInstance BackgroundCopyManager : hr= 0x80070422
[3/12/2010, 10:51:12] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Use WinHttp
[3/12/2010, 10:51:12] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download attempt 2 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:18] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) Auto detecting proxy information
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) WinHttpDetectAutoProxyConfigUrl failed with error: 12180
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::GetProxySetting) Auto detection of proxy failed, try to retrieve proxy information via IE.
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Retrieving proxy information using WinHttpGetIEProxyConfigForCurrentUser
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Unable to retrieve Proxy information although WinHttpGetIEProxyConfigForCurrentUser called succeeded
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::CreateSession) WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::StartDownload) Session Created
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::StartDownload) Connection Created
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::StartDownload) Request Created
[3/12/2010, 10:51:21] (IronSpigot::WinHttpDownloader::AsyncCallbackInternal) WINHTTP_CALLBACK_STATUS_REQUEST_ERROR error: error=12007, result= 5. Percentage downloaded=-2147483648
[3/12/2010, 10:51:21] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::DownloadUsingUrlMon) Cannot resolve server name (12007) when downloading using WinHttp, try using URLMON
[3/12/2010, 10:51:21] (IronSpigot::UrlMonDownloader::PerformAction) UrlMon download failed with 800c0005
[3/12/2010, 10:51:21] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download failed at attempt 2 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:21] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::UseHttp) Determine the protocol to use
[3/12/2010, 10:51:21] (IronSpigot::BitsDownloader::InitializeBITS) Failed to COCreateInstance BackgroundCopyManager : hr= 0x80070422
[3/12/2010, 10:51:21] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Use WinHttp
[3/12/2010, 10:51:21] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download attempt 3 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:27] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) Auto detecting proxy information
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) WinHttpDetectAutoProxyConfigUrl failed with error: 12180
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::GetProxySetting) Auto detection of proxy failed, try to retrieve proxy information via IE.
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Retrieving proxy information using WinHttpGetIEProxyConfigForCurrentUser
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Unable to retrieve Proxy information although WinHttpGetIEProxyConfigForCurrentUser called succeeded
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::CreateSession) WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::StartDownload) Session Created
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::StartDownload) Connection Created
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::StartDownload) Request Created
[3/12/2010, 10:51:29] (IronSpigot::WinHttpDownloader::AsyncCallbackInternal) WINHTTP_CALLBACK_STATUS_REQUEST_ERROR error: error=12007, result= 5. Percentage downloaded=-2147483648
[3/12/2010, 10:51:29] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::DownloadUsingUrlMon) Cannot resolve server name (12007) when downloading using WinHttp, try using URLMON
[3/12/2010, 10:51:29] (IronSpigot::UrlMonDownloader::PerformAction) UrlMon download failed with 800c0005
[3/12/2010, 10:51:29] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download failed at attempt 3 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:29] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::UseHttp) Determine the protocol to use
[3/12/2010, 10:51:29] (IronSpigot::BitsDownloader::InitializeBITS) Failed to COCreateInstance BackgroundCopyManager : hr= 0x80070422
[3/12/2010, 10:51:29] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Use WinHttp
[3/12/2010, 10:51:29] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download attempt 4 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:35] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) Auto detecting proxy information
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::GetProxySettingViaAutoDetect) WinHttpDetectAutoProxyConfigUrl failed with error: 12180
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::GetProxySetting) Auto detection of proxy failed, try to retrieve proxy information via IE.
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Retrieving proxy information using WinHttpGetIEProxyConfigForCurrentUser
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::GetProxySettingViaIE) Unable to retrieve Proxy information although WinHttpGetIEProxyConfigForCurrentUser called succeeded
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::CreateSession) WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::StartDownload) Session Created
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::StartDownload) Connection Created
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::StartDownload) Request Created
[3/12/2010, 10:51:38] (IronSpigot::WinHttpDownloader::AsyncCallbackInternal) WINHTTP_CALLBACK_STATUS_REQUEST_ERROR error: error=12007, result= 5. Percentage downloaded=-2147483648
[3/12/2010, 10:51:38] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::DownloadUsingUrlMon) Cannot resolve server name (12007) when downloading using WinHttp, try using URLMON
[3/12/2010, 10:51:38] (IronSpigot::UrlMonDownloader::PerformAction) UrlMon download failed with 800c0005
[3/12/2010, 10:51:38] (IronSpigot::RetryingDownloaderT<class IronSpigot::WinHttpDownloader,class IronSpigot::BitsDownloader,class IronSpigot::UrlMonDownloader,class IronSpigot::FileAuthenticity>::PerformAction) Download failed at attempt 4 of 4 for http://go.microsoft.com/fwlink/?LinkID=150219 using http:
[3/12/2010, 10:51:38] (IronSpigot::LogUtils::LogFinalResult) Final Result: Installation failed with error code: (0x800C0005).shahdat
|
|
|
|
|
Try an offline install.
See here[^].
This link was written for Sl2 but a similar process can be used for SL3 as well.Me, I'm dishonest. And a dishonest man you can always trust to be dishonest. Honestly. It's the honest ones you want to watch out for...
|
|
|
|
|
|
I have made a website in ASP.NET where i have three forms. 1st form is having a button which will direct it to 2nd form and 2nd form is having linkbutton which on click directs it to 3rd scrren. When i click button on first screen, it goes to 2nd form but when i click link button on 2nd screen, it gives Javascript error. Can somebody please help me resolving this problem.
|
|
|
|
|
Yeah, fix the JavaScript error.
And what does this have to do with the .NET Framework?
Repost your question, WITH the javascript error message, in the Web Development forum.
|
|
|
|
|
Hello people.
Anyone know how you can create a screen that looks like the Outlook calendar 2007.
The truth is that I see there one clear datagridview, but I want all the options that are in there.
View by month, week or almost copied, try and nothing.
Thanks in advance.
|
|
|
|
|
Something like the "Outlook Calendar Look And Feel"? There's a WinForms example on WindowsClient.NET[^], with a downloadlink somewhere at the bottom of the page.I are Troll
|
|
|
|
|
Parallel processing is supposed to increase performance, not decrease.
Am I missing something??? Any explanations for slower parallel performance.
(I have a Intel core2 duo processor with 2 CPU’s. System.Environment.ProcessorCount = 2)
Thanks
Tiju
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ParallelConsole
{
class Program
{
static bool IsPrime(double x)
{
if (x < 2) return false;
double sqrroot = Math.Ceiling(Math.Sqrt(x));
bool isPrime = true;
for (int i = 2; i <= sqrroot; i++)
{
if (x % i == 0)
{
isPrime = false;
break;
}
}
return isPrime;
}
static void helper(double i, DateTime dt)
{
if (i != 1)
i = 3;
while (i > 0 && i <= 100000)
{
if (IsPrime(i))
Console.WriteLine(i.ToString() + " : " + DateTime.Now.Subtract(dt).ToString());
i += 4;
}
}
static void Main(string[] args)
{
Console.WriteLine("Finding prime numbers(from 1.). Press Enter to start!");
Console.ReadLine();
DateTime startTimeSequential; TimeSpan sq = new TimeSpan();
DateTime startTimeParallel; TimeSpan prl = new TimeSpan();
startTimeSequential = DateTime.Now;
for (int i = 1; i <= 2; i++)
{
helper(i, startTimeSequential);
}
sq = DateTime.Now.Subtract(startTimeSequential);
startTimeParallel = DateTime.Now;
Parallel.For(1, 3, (i => { helper(i, startTimeParallel); }));
prl = DateTime.Now.Subtract(startTimeParallel);
Console.WriteLine("Total time sequential = " + sq.ToString());
Console.WriteLine("Total time parallel (2) = " + prl.ToString());
Console.ReadLine();
}
}
}
|
|
|
|
|
tijujohn83 wrote: Parallel processing is supposed to increase performance, not decrease.
Am I missing something???
Yup, you're missing the piece of information that states that threads need to be created before they execute code. Look at it as if each thread was an application; each app needs be started, needs resources, needs handling.. that's all overhead.
Threads are used to divide the work over multiple cores, if there's much work to do (anything that takes longer than a second, according to MS design guidelines)
Try copying large files from the methods, you'll find that the second thread can work on the second core, without having to wait for thread 1 I are Troll
|
|
|
|
|
hmm. you are right. I was just trying out the parallel loops in the Task process library in .net 4
and while i was trying out different things, i ran the test again, and this time the parallel version run much faster.
|
|
|
|
|
You've run into the little problem of overhead and you've approached your problem incorrectly.
First, finding the primes of the first 100000 integers takes far less time than setting up the range partitioner (by default on IList and arrays) and grabbing an extra thread out of the pool to run your code.
You've also parallelized the outside loop that runs two (3 in this case) copies of the 1 through 100000 range instead of parallelizing the range itself. What you've done is really just forced this into a Task situtation and used Parallel to do it. This is not what Parallel was designed for.
It should look more like:
var primes = from c in Enumerable.Range(1, 10000000).AsParallel Select IsPrime(c)
Sorry, if this doesn't really compile, I'm translating from VB.NET to C# having never done LINQ in C#.
|
|
|
|
|
thanks for the comments. i'll try this out.
i have one doubt,
the two streams would be like
1,5,9,13,17,...
3,7,11,15,19...
how is this different from parallelizing the range.
|
|
|
|
|
Using your code as a base, this is how I would rewrite it. Note I threw together the custom IEnumerator<int> for an enumerable ForStep. I didn't see a "steppable" version in Enumerable or Parallel anywhere, so I threw together my own. Just a reminder, these LINQ queries are not executed until the variables Prime1 and Prime3 are used.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace IsPrime
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
var Primes1 = from x in EnumerableForEach.ForEach(1, 10000000, 4).AsParallel()
where IsPrime(x)
select x;
var Primes3 = from x in EnumerableForEach.ForEach(3, 10000000, 4).AsParallel()
where IsPrime(x)
select x;
sw.Start();
Console.WriteLine("Primes (1, step 4) collection size: {0}", Primes1.Count());
sw.Stop();
Console.WriteLine("Time: {0}\n", sw.Elapsed);
sw = Stopwatch.StartNew();
Console.WriteLine("Primes (3, step 4) collection size: {0}", Primes3.Count());
sw.Stop();
Console.WriteLine("Time: {0}", sw.Elapsed);
}
static bool IsPrime(int x)
{
if (x < 2) return false;
double sqrRoot = Math.Ceiling(Math.Sqrt(x));
bool isPrime = true;
for (int i = 2; i < sqrRoot; i++)
{
if (x % i == 0)
{
isPrime = false;
break;
}
}
return isPrime;
}
}
}
public class EnumerableForEach
{
public static IEnumerable<int> ForEach(int start, int limit, int step)
{
return new EnumerableForEach.ForEachIterator(start, limit, step);
}
private sealed class ForEachIterator: IEnumerable<int>, IEnumerator<int>, IDisposable
{
int _start;
int _limit;
int _step;
int _current;
public ForEachIterator(int start, int limit, int step)
{
_start = start;
_limit = limit;
_step = step;
_current = start - step;
}
public IEnumerator<int> GetEnumerator()
{
return this;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this;
}
public int Current()
{
return _current;
}
public void Dispose()
{
}
object IEnumerator.Current
{
get { return _current; }
}
public bool MoveNext()
{
_current += _step;
return (_current < _limit);
}
public void Reset()
{
throw new NotImplementedException();
}
int IEnumerator<int>.Current
{
get { return _current; }
}
}
}
The results I got on a 2 core VM (VMWare) running Windows Server 2003, through 10,000,000 instead of 100,000. Remove the .AsParallel() lines to force these LINQ's to run single threaded.
Primes (1, step 4) collection size: 332625
Time: 00:00:05.4500960
Primes (3, step 4) collection size: 332398
Time: 00:00:05.1003926
Press any key to continue . . .
|
|
|
|
|
Hi Tiju,
I can't speak to you specific question but I'm about to embark on a parallel project myself. I'm studying the Intel Concurrent Collections for C++. MSVC 2010 has some new stuff to support this also but my understanding is much of it is based on Intel technology.
Good Luck!
Rob.
|
|
|
|
|
Why are you using doubles to calculate prime numbers when primes are all integers?
If it's just so you can use the square root - there is no rule saying you can't cast that back to an int, and even better, it's possible to calculate the integer square root.
And you don't even need the square root (which is slow to calculate) anyway, you could compare the square of i with x (which is obviously equivalent to comparing i with the square root of x ) - better yet, you don't even need to do the multiplication (you can use repeated adding of odd numbers)
Also, after testing whether x is even (if ((x&1)==0) ) you never need to put an even number into the trial division ever again since if i divides x and i is even, 2 also divides x .
And you're already applying parallelisation? It's a good thing this is just a test..
|
|
|
|
|
There is more to it.
All primes except 2 and 3 are of the form multiple-of-6 plus or minus 1, so the two threads should be devoted to those two series, i.e. the increment needs to be 6, not 4 so multiples of 3 aren't even considered (I agree, they would fall out pretty quickly).
And then all that fancy enumerator stuff is costing cycles; its overhead well exceeds its functionality. A cleanly coded single thread can completely outpace what has been shown. I have a primes workbench where I experiment a lot, it currently locates all primes up to 10 million in 0.25 seconds; and up to 1 billion in 6.8 seconds.
Eventually I will write a little article on it!
|
|
|
|
|
Or you could use one of those fancy sieves.. but then you're changing the whole algorithm of course (cheat)
But yea write that article, you've been talking about for over half a year (IIRC)
|
|
|
|
|