WebDeveloper add-on for Firefox 3.* (all betas and stuff)

January 8, 2008

Update: Web Developer addon now officially supports Firefox 3. Check out history (version 1.1.5). Download the new version here.

Old post about my hack:

Just a note that there are a number of features that do not work correctly in Firefox 3. I am working on fixing these and putting together a new release. You are free to use this hacked version of course, but just a word of warning.

Chris Pederick – Author of Web Developer


Today I tried out the brand new Firefox 3 Beta 2. Nice. I like the new address bar and the ability to resume downloads after closing Firefox. The only thing I needed was WebDeveloper add-on (extension), which, unfortunately, does not work in FF3 yet. So, since I had a bit of add-on development experience I decided to change the max version inside the add-on. No problems occurred. Grab the .xpi (change file extension from “jpg” to “xpi” and open it with FF): web_developer-114-fxfl.jpg

That is all 🙂


Dialog with technical support

December 26, 2007

So, recently I had a dialogue with technical support of one service. The problem was simple – I had to download about 1.6GB of files from them and the download speed was 2-5KB/sec. (yes, KILOBYTE per second). So I contacted the support telling them that this is unacceptable (ETA ~240 hours or something like that).

Me:

<I explain the problem in detail, everything I thing would be important>

Support:

Thank you for contacting us. In order to better understand your issue, please send us a little information about your network setup. We need to know exactly how you connect to the Internet. Do you use any routers, hubs, or switches? If so, what is the make and model? Who is your Internet provider and where are you physically located? Are you on a home, campus, business or military network? Please also let us know if you are using any firewall or Internet security applications such as Norton™, McAfee®, or ZoneAlarm®.

Me:

Hi, I am behind a Trendnet <my model> router (at home, so no restrictions are set up on the router).
I am located in , my ISP is .
Additionally, I tried attaching “-p 13…” to the command line, I am running the program as administrator.
I have set up port forwarding:
1. UDP xxxxxxx
2. TCP xxxxxxx
3. TCP xxxxxxx
4. TCP xxxxxxx

Support:

Thank you for providing the requested information.

At this time, we would like to know exactly how you connect to the Internet. Please also let us know if you are using any firewall or Internet security applications such as Norton™, McAfee®, or ZoneAlarm®.

Me:

What do you mean “how exactly do you connect”? I take my internet cable, plug it to my cable modem, which is connected to my router and then I connect my PC and my router with a crossover cable.
I use .

Support:

Thank you for contacting us.

Usually connection issues such as this are caused by the way your network is set up. If you use a router, hub, or switch to share a single Internet connection, try disconnecting the device and connecting your PC directly to your modem. To reestablish your Internet connection, you will need to reset the modem by unplugging the power from it for 30 seconds and in addition rebooting your computer. Confirm your Internet connection is working properly by visiting a few websites. If this setup resolves the connectivity issue with the , then the router may need to be configured properly or require a firmware update. Assistance for both of these tasks can be found at the device manufacturer’s support website. If you are still experiencing this issue while directly connected to your modem, make sure any firewalls are configured to allow the to connect. If you still have connectivity issues after trying these steps then please let us know.

Whoosh! Now, in my life I was a witness for a lot of pointless dialogues, but this… this is just … unexpressable. This is the exact way how support should not act. You tell them everything they ask you about and puff! NOTHING! You get the same old answer. Now, already at the second reply I started thinking that this “support” is actually not human-based, but purely computer-based. Grrr, I’m andgry. Know what? I’m downloading the 1.6GB @ 3KB/sec now. Nothing I can do.


Moving to a new hosting!

December 14, 2007

Hey, the “move” is cancelled! I’m staying here!


HOW-TO: Creating a simple UserControl for displaying a FlowDocument

September 12, 2007

Hello. This is my first post about WPF.

This how-to will show you how to create a UserControl in which you can show a FlowDocument by passing a string containing the FlowDocument. It also allows Data Binding.

Lets start.

1. Create a UserControl called FlowDocumentViewer in Expression Blend (you can also do this in Visual Studio if you want) and add a FlowDocumentScrollViewer to LayoutRoot. Name it flowDocument (you can name it like you want, but I will be using this name in this guide). Your structure should be as follows:

Structure

2. Now, open the project in Visual Studio and add the following code to your FlowDocumentViewer.xaml.cs:

        public static readonly DependencyProperty ContentFlowDocumentStringProperty = DependencyProperty.Register(
            "ContentFlowDocumentString",
            typeof(string),
            typeof(FlowDocumentViewer),
            new FrameworkPropertyMetadata(null,
                FrameworkPropertyMetadataOptions.AffectsRender,
                new PropertyChangedCallback(DescriptionFlowDocumentUI.OnContentChanged)
            )
        );

        private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            FlowDocumentViewer control = (FlowDocumentViewer)d;
            control.flowDocument.Document =
                (System.Windows.Documents.FlowDocument)System.Windows.Markup.XamlReader.Load(
                    new MemoryStream(System.Text.UTF8Encoding.Default.GetBytes((string)e.NewValue))
                );
        }

        public string ContentFlowDocumentString
        {
            get { return (string)GetValue(ContentFlowDocumentStringProperty); }
            set { SetValue(ContentFlowDocumentStringProperty, value); }
        }

Lets see what this code does.

a) We added a DependencyProperty called ContentFlowDocumentStringProperty to our class. This DependencyProperty “points” at ContentFlowDocumentString property, as well as it tells, that this property of type string and we registered a callback function (OnContentChanged), which will be triggered when ContentFlowDocumentString is changed. Note that FrameworkPropertyMetadataOptions.AffectsRender piece of code. This tells WPF, that when this property is changed it affects the UI looks, so that WPF knows he has to render something.

b) The OnContentChanged function is called whenever our DependencyProperty is changed. Here we do the actual work of changing the FlowDocument in our control. We get the instance as an argument (DependencyObject d, which we cast to FlowDocumentViewer explicilty) and we create a new FlowDocument from the newly assigned string ((string)e.newValue).

c) Finally we added the actual property – ContentFlowDocumentString. See those GetValue and SetValue? Don’t be surprized, it is how DependencyProperties work. You don’t have a special (private) field in your class for them. WPF does all the work for you.

Well, that is pretty much it.

The usage is simple:

FlowDocumentViewer fdv = new FlowDocumentViewer();
fdv.ContentFlowDocumentString = stringContainingFlowDocumentXAML;

Or if you want to use data binding, it is absolutely similar to casual binding in WPF:

Binding b = new Binding();
b.Source = myBindingSource;
b.Path = new PropertyPath("PathToProperty");
FlowDocumentViewer fdv = new FlowDocumentViewer();
fdv.SetBinding(FlowDocumentViewer.ContentFlowDocumentStringProperty, b);

If you have questions / remarks / etc. feel free to post them. I will try to answer.


eDonkey

August 8, 2007

зашёл сегодня на сайт еДанки. и прямо офигел. мало того, что я не знал что всё накрылось медным тазом, так они ещё и “страшный” текст туда написали. Ужас какой. Кому лень туда идти, то вот:

If you steal music or movies, you are breaking the law.

Courts around the world — including the United States Supreme Court —
have ruled that businesses and individuals can be prosecuted for illegal
downloading.

You are not anonymous when you illegally download copyrighted material.

Your IP address is xxx.xxx.xxx.xxx and has been logged.

Respect the music, download legally.

О ужас! Мой ИП залогили! Что мне делать?! Ааааааааааа! Ко мне же придут! Заберут в американский супер-суд. Прощайте, дамы и господа!


YouTube – 500 Internal Server Error. A nice joke from YouTube.

July 28, 2007

So today I hit an internal server error @YouTube. It said that it would be nice of me to report the thing. “Well”, – I though, – “I could report something once in a lifetime”. I decided to report. The error page had a nice link to the report form. Clicked it, filled it in. The error page asked me to include some kind of encoded abra-cadabra in my report (example of this arba-cadabra: “0rF3m6tOvt-q5Dlktd3-fpLj8oGDzySl21207UB … … … Rr7B1cjENm_TJhEY5_cagqyxHYMPi9HjU3o=”). Ok, no problemo! Copy-paste into the “Message” box. Nothing else to do – I press “Submit”. Well-well-well, what have we got here? An error! Here it is:

Please enter less than 350 characters (currently 2044 characters)

Wow! They ask me to submit some debug info and after that tell, that it is too long. Sheesh. That was stu-pid. Way to go, YouTube!


HOW-TO: Linksys WUSB54GC Wireless and Ubuntu Linux (7.04 Feisty / 7.10)

July 24, 2007

Drivers for WUSB54GC

Hi, this is a guide I decided to write after buying and installing a Linksys WUSB54GC wireless USB adapter. The guide is very simple.

What you need to get this device going is to install ndiswrapper and the driver. You can use the driver attached to this post (or you can go to Linksys official web-site, download the driver (not the Vista one), unpack it (I know that it is an EXE file, but you can still unpack it) and find the drivers in the Drivers folder – that’s exactly how I got the drivers I attached to this post).

Ok, now the installation procedure. Lets assume you unpacked the drivers into your home directory (~) – the should be three files:

  • rt73.cat
  • rt73.inf
  • rt73.sys

1. Install ndiswrapper:

apt-get install ndiswrapper

2. Change the dir to where your driver files are located:

cd ~

3. Install the drivers:

ndiswrapper -i rt73.inf

ndiswrapper -m

ndiswrapper -mi

ndiswrapper -ma

4. Reboot. Now the device should start working – you can verify that by clicking on the nmapplet or by going to Administration->Network – it should be there and it should show you wireless networks. I got it working that way and it correctly shows the signal strength, connects nicely – works nicely.

Now, why I used ndiswrapper – before I installed and configured ndiswrapper the device was also present and it even showed me the wireless networks, but it did not connect to any network.