|
hi there masters of c# code
i bow to your hard work and knowledge
i am a beginner and i would be very gratefull for full explainations and not just code snippets
my target is to create a web browser app in c# which load a difffrent website on each runtime
the string i want to run is posted below
i have about 70 webistes i wish the app to load a diffrent one from the 70 each runtime
the other thing is i want a way to make it load a diffrent user agent also each time i have also a list of about 120 user agents
thank you very much
i will post how far i got below
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("http://www.anyweb.com", "_self", null, "User-Agent: Mozilla/4.0
}
}
}
|
|
|
|
|
I would likely put the list of URLs in a database and select one at random -- but just how random do you want them?
|
|
|
|
|
no need for real random , it could be one at a time as long as it doesnt keep useing same one i mean if the app runs 70 times i would expect it to choose a diffrent one each runtime same fo rteh user agents
|
|
|
|
|
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
static List<string> urls;
static Random random;
public Form1()
{
InitializeComponent();
if(urls == null)
{
urls = GetWebsiteUrls();
random = new Random();
}
string url = urls[random.Next(urls.count)];
webBrowser1.Navigate(url, "_self", null, "User-Agent: Mozilla/4.0
}
}
}
cut this free hand so it may not compile but you get the idea.
"You get that on the big jobs."
|
|
|
|
|
thank you that looks great
the part you said need to implement , could you elaborate or someone can ?
with regards to the user agents can the same method you have shown be used?
thanks again !
|
|
|
|
|
Sure, you'll want to take the same approach for the webagents.
The GetWebsiteUrls method is a method that returns a collection of strings representing the the websites. I don't know how you are storing these values. Also the form shouldn't know anyway. In case you change the type of data source.
You could use a database if people are going to add delete entries. You could use a config file if the values rarely change or you could hard code it if they virtually never change
public List<string> GetWebsiteUrls()
{
List<string> urls = new List<string>();
url.Add("http://a.b.c");
url.Add("http://a.c.c");
....
return urls;
}
"You get that on the big jobs."
|
|
|
|
|
yes it will be hard coded
not for user to edit
i am a bit of an amateur so i really apprcieate your help if you have any more would be great
more help with getting this working
|
|
|
|
|
ok i tried to put your code
and i get urls + random ( The name 'urls' does not exist in the current context
|
|
|
|
|
Maybe try Form1.urls I don't have a Windows PC at hand at the moment. If that doesn't work, post the code
"You get that on the big jobs."
|
|
|
|
|
Store the list and the current run number in state somewhere – I'd put them in a file, but you could use the registry or even a database if your app already needs one. On startup, read the run counter, increment it, re-save the state and read the appropriate URL and user agent combo. (You could read the whole list and just index into it, if it's small, which it is in your question.)
|
|
|
|
|
|
I'm trying to optimise the following Slope method so that it runs in as few clock cycles as possible.
Any Suggestions?
public static double?[] slopeImpl(double?[] vals, int offset)
{
double y = 0;
int iterableLength = vals.Length;
int numValues = vals.Length;
double invNumValues = 1.0 / (vals.Length - offset);
double x = (double)(((numValues * (numValues - 1)) >> 1) - ((offset * (offset - 1)) >> 1));
for (int i = offset; i < iterableLength; i++) {
y += (vals[i].GetType() == typeof(System.DBNull)) ? 0.0 : (double)vals[i];
}
y = y * invNumValues;
double v1 = 0.0;
double v2 = 0.0;
double v2HalfResult = 0.0;
for (int i = offset; i < iterableLength; i++) {
v2HalfResult = (i - x);
v1 += (v2HalfResult) * ((double)vals[i] - y);
v2 += (v2HalfResult) * (v2HalfResult);
}
double slope = v1 / v2;
double intercept = y - slope * x;
double?[] result = new double?[2];
result[0] = slope;
result[1] = intercept;
return result;
}
What I have considered:
1. There are two loops which are iterating the same number of times; however I am not sure if it is possible to use one loop. The second loop is dependant on the value of y which is calculated in the first loop and the line after.
2. Use a table to calculate x which is of the form
n(n-1) /2. Possible, however the values array can contain more than 365 elements.
Thanks for any help.
modified 5-Mar-12 21:35pm.
|
|
|
|
|
Instead of
y += (vals[i].GetType() == typeof(System.DBNull)) ? 0.0 : (double)vals[i];
could be changed to something along the lines of
if (vals[i].HasValue) y += vals[i].Value;
But are there actually any null values? Changing the argument to just a straight out double[] would definitely help
"You get that on the big jobs."
|
|
|
|
|
Thanks for the help, and yes the vals array can contain null values.
|
|
|
|
|
No you can't avoid the two loops, you need the averages first, then the deviations, which you can't get without knowing the averages first.
IMO all you can do is clean up your code a bit, by:
- getting rid of the nullables, GetType() and typeof;
- not calling vals.Length three times;
- returning just the slope as a double;
- not calculating the intercept, unless you really need it, and then maybe provide the intercept as an out parameter (this saves the allocation of the double[2] array).
BTW: using >>1 to divide by 2 does not really help; compilers are smart enough to emit decent code to divide by 2.
BTW2: I have some doubts about the correctness of your line
double x = (double)(((numValues * (numValues - 1)) >> 1) - ((offset * (offset - 1)) >> 1));
it doesn't agree with my intuition, e.g. changing the value of offset from 0 to 1 would not change x at all??
|
|
|
|
|
Thanks Luc. I was so caught up with optimising that I missed the case where offset was one will have to handle that. Good job spotting this.
|
|
|
|
|
Using double not double?, and if necessary using double.NaN for missing values, should help considerably.
|
|
|
|
|
I desperately need a semantic music engine working project..if anyone have their hands on it plz mail it on shaikh.bros21@gmail.com
|
|
|
|
|
Posting your email address is a Very Bad Idea.
And please explain what it is you are talking about.
|
|
|
|
|
Sounds complicated. It's highly unlikely that anyone here has a copy for you to have, and if they did, they would probably want a lot of money for the source. By the way, if you don't want spam, don't put your email address into a public forum.
|
|
|
|
|
I'm new to Async programming. I have this method:
private void getUserInfo(string UserId)
{
var task = facebookClient.GetTaskAsync(UserId);
Action<object> action = userInfoRequestCallback;
task.ContinueWith(action);
}
the callback is
private void userInfoRequestCallback(object data)
{
Task<object> task = data as Task<object>;
IDictionary<string, object> results = task.Result as IDictionary<string, object>;
FacebookUser = new FacebookUserModel
{
UserId = (string)results["id"],
UserName = (string)results["name"],
FirstName = (string)results["first_name"],
LastName = (string)results["last_name"],
Link = (string)results["link"],
Gender = (string)results["gender"],
Locale = (string)results["locale"],
};
}
How do I return a value from the getUserInfo, so that I can do:
FacebookUserModel user = getUserInfo("someid");
Everything makes sense in someone's mind
|
|
|
|
|
You don't. Application processing continues immediately after firing off the async call so you cannot return values that depend on the callback completing. The way round it is to set this value from your callback, so you will need a member variable to hold the value. Alternatively, look at the Task Parallel Library which would ease this for you considerably.
|
|
|
|
|
async call = get it done at your leisure
return value = I need it as soon as you return
So the only way to get the return value is by re-synchronizing inside the method, which might defeat the whole idea of using an async call.
|
|
|
|
|
I would use the new async keyword. It encapsulates everything for you including waiting for the response. Much easier then other alternatives.
|
|
|
|
|
And currently only available as part of the Async CTP or Visual Studio 11 (.NET 4.5).
|
|
|
|