teleren/devto huggingface dataset:
How to figure out why users hate your Chrome Extension
Tags: beginners, javascript, chromeextension, userfeedback
Published: 2017-08-26 00:56:03

---
title: "How to figure out why users hate your Chrome Extension"
layout: post
published: true
comments: True
excerpt: "Easily get feedback for your Chrome Extension through Google Forms."
categories: [chrome-extension]
tags: [user-feedback, beginners, chrome-extension, javascript]
---

*Note: this article was originally published on my [blog](http://blog.shivankaul.com).*

I maintain a [Chrome Extension](https://chrome.google.com/webstore/detail/pretty-print-gmail/gdanfldekhdgkbmdoeapbgbcpfglkflg) with a modest ~2,700 weekly active users. I quickly realized the importance of getting feedback, and settled upon a lightweight method of serving a Google Form to users when they uninstall the extension. I figured it might be helpful to other Chrome Extension developers looking to get data on why people are uninstalling their extension!

# 1. Create a Google Form

Go to [Google Forms](https://docs.google.com/forms/). Create a form. Use [this as sample](https://docs.google.com/forms/d/e/1FAIpQLSeB6dBk9RqjCZKM973FE6VZksoSkjhHDzUAaRoJQ679muJ1Vg/viewform) if you can't think of good questions to ask on a feedback form.

After you're happy with your form, click Preview (the eye icon next to colour palette and settings gear). Copy the URL. This will be your public-facing form link.

<!-- not using `` on background.js because it messes up the heading -->
# 2. Add code to background.js to redirect users to your form on uninstallation

```javascript
/* Check whether new version is installed */
chrome.runtime.onInstalled.addListener(function(details) {
    /* other 'reason's include 'update' */
    if (details.reason == "install") {
        /* If first install, set uninstall URL */
        var uninstallGoogleFormLink = 'YOUR_FORM_LINK_HERE';
        /* If Chrome version supports it... */
        if (chrome.runtime.setUninstallURL) {
            chrome.runtime.setUninstallURL(uninstallGoogleFormLink);
        }
    }
});
```


**IMPORTANT**: Add this snippet to the bottom of your `background.js` file, or whatever is guaranteed to run when the extension installed. If no javascript runs on extension install, then add it to whatever script gets run first. The snippet only needs to get run once.

When the extension is uninstalled, the browser opens up a new tab and goes to your Google Form.

Note that you can also add custom javascript to be run when your extension is updated by replacing `details.reason == "install"` with `details.reason == "update"`. [Details here](https://developer.chrome.com/extensions/runtime#method-setUninstallURL).

# 3. Analyze responses

All user responses are stored in your Google Drive for your leisurely perusal and data graphing. Here's an example of a simple statistic:

<p align="center">
  <img src="http://shivankaul.com/blog/assets/ppg-uninstall.png"/>
  <br><br>
  <sub><em>I too prefer the "Too clunks; don't want" OS</em></sub>
</p>
Jumping on the AMA bandwagon
Tags: ama, askmestuff
Published: 2018-09-20 12:34:26

---
title: Jumping on the AMA bandwagon
published: true
tags: ama,ask me stuff
canonical_url: http://designfrontier.net/jumping-on-the-ama-bandwagon
---

Today I am at [React Rally](http://reactrally.com) in SLC and after a particularly inspiring talk by [Preethi Kasireddy](http://twitter.com/iam_preethi) I created an Ask Me Anything on [github](https://github.com/designfrontier/ama).

It feels a little bit ego-centric... but I am hoping that I can build this out with the questions that I am often asked so that people can have a resource to learn from my mistakes. And hopefully so that people new to the industry have an easy way to ask questions and get answers.

So please ask anything, by opening an issue there, and I’ll answer them there in the readme. If a question deserves more space I’ll answer here and put a link there.

Ohhh right... you can find a link there permanently in the navigation above.

"Wait?!" you say, "What navigation?"

Click on the designfrontier up there. It expands into navigation. Yes I know that isn’t very discoverable. That is on purpose. I really should write about the design experiment that this site is. Maybe soon. Or someone could ask in the AMA :-)
What is the one thing that would make you move on?
Tags: discuss
Published: 2017-08-25 22:01:32

---
title: What is the one thing that would make you move on?
published: true
tags: discuss
---

We are all different. We have different aspirations, dreams, goals. When you are looking for a job, or an offer comes at you, what is the one thing that trumps everything else? The one thing that makes the job VERY interesting. On the other end, when that particular thing is missing, the job isn't just that attractive in your eyes.

To me, it's working remotely. I absolutely love it. I don't know if I will do it my entire career, but I sure hope so. If I work remotely, the job isn't so bad.

What is yours? Money? Working on a product you believe in? Working with a great team? Company culture?
Why micro mobile apps are gaining significant momentum in 2017?
Published: 2017-08-25 20:32:04


---
title: "Why micro mobile apps are gaining significant momentum in 2017?"
published: true
description: 
tags: 
---



The global industry of mobile apps development has continued to profess and bring considerable improvements in terms of satisfying businesses dynamic demands for value added mobile apps, unlike previous years. Keeping it up on the topmost priority, application developers and app providers have vigorously started focusing to develop micro apps which is one of the latest norms in mobile application development.

In the previous years, it has been widely observed that Facebook and Google already introduced their Facebook Messenger and Google Hangouts application respectively clearly reflecting the potential in the micro mobile app technology. A leading mobile development agency in California concludes that these applications are not just opening a whole new door of learning and brainstorming for the developers’ community but, has started to become one of the best ways to address mobile users growing demand for time efficient apps.  
Facebook Messenger and Google Hangouts are only the top most and easy understand examples of micro apps but on the other hand, SMEs and enterprises have also started making the best use of micro apps in terms of their various digital tools that help them in greater business development. Experts are required to move a few more steps forward in terms of bringing greater performance and security value additions now to these apps.

A leading [mobile development agency in California](https://www.ingic.com/california/mobile-app-development/)  concluded in one of its blog posts that micro apps are not just considered to be the most modern norm in mobile application development for developers in 2017 but in addition to that, it has also enabled the industry analysts and critics to go above and beyond their expected boundaries when it comes to suggesting newer breakthroughs and concepts to the world of mobile app users and it is also expected that an extensive range of value additions and ideas will soon arrive in the next couple of years.
Nulling JavaScript
Tags: javascript, coding
Published: 2017-08-25 18:18:07

---
title: Nulling JavaScript
published: true
description: New Operator to handle null in JavaScript
cover_image: https://thepracticaldev.s3.amazonaws.com/i/654kh3kpo81ez5i7l235.jpg
tags: javascript, coding
---

Don't you love huge object graphs in JavaScript? Like, when you get some nice data from that JSON API and have to look so deep into it, you just hope it doesn't look back?

Well, more often than not it does and then things get messy and you curse that damn JavaScript for not providing you with better tools and you forget that you just have modeled out that data structure with nice access interfaces in the first place.

Like most of you lazy bums I just love my plain old JavaScript objects and if I wanted the language to help me I would have used a statically typed one anyway, right? ;)

Long time, the solutions (besides really modeling your data) were looong checks or [third party libs](https://lodash.com/docs/4.17.4#get).

```javascript
    let myValue = "default";
    if (response && response.body && response.body.somethingElse) {
      myValue = response.body.somethingElse.myValue;
    }

    import _ from "lodash";
    
    const myValue = _.get(response, "body.somethingElse.myValue", "default");
```

But, fear no more my fellow JavaScripters, for we will soon conceive the infamous __Null Propagation Operator__!

What does it do?!

It lets you access the depth of your data without the fear of everything blowing up when that darn back-end dev just changed the structure again.

```javascript
    const myValue = response?.body?.somethingElse?.myValue || "default";
```

It will even work with arrays or functions

```javascript

    const someValueFarAway = myArray?.[993];

    const calculatedIfAvailable = myFunc?.(10);

```

But when will we have it?!

I have no idea...

At the moment this proposal seems to be Stage-2 and a [Babel plugin](https://github.com/babel/babel/pull/5813) is in the works.

The question is now, is it a blessing or a curse from the JavaScript gods?

Will it make code more robust with less thinking or will all the silent errors accumulate to silent time bombs under our asses?

Like so often, I just don't know...
Friday Blast #7
Tags: fridayblast, links, post
Published: 2019-01-20 15:18:27

---
title: Friday Blast #7
published: true
tags: friday_blast,links,post
canonical_url: https://horia141.com/friday-blast-7.html
series: "Friday Blast"
---

A shorter week this week. Didn’t get that much reading on account of spending most of my reading time on Designing Data Intensive Applications.

[A history of branch prediction from 1500000 BC to 1995 (2017)](https://danluu.com/branch-prediction/) - branch prediction algorithms are used by CPUs to, you guessed it, predict which branch of an `if`, `for` or `while` condition is going to be taken. It’s of vital importance to get this right in deeply pipelined CPUs[1], because the cost of a mis-predict is a discarding of all the processing done on the current instruction. This article is an introduction and overview up to the year 1995. Very interesting none-the-less, especially since things started repeating themselves as progress was made, as is oft the case.

[What next (2017)](http://graydon2.dreamwidth.org/253769.html) - this deals with what future ideas from programming language research the author would like commercial programming languages to start using. Modules and error handling seem to be the biggest asks. Which I found interesting, cause I thought modules and error handling _were_ solved to a large degree in modern languages. Turns out that’s not the case and there’s a huge body of work trying to get them _right_. From the list I’d love to see effects systems and extended static checking turn up in more programming languages. Much of the stuff in [Raynor](https://github.com/horia141/raynor) could be expressed as static checks for example.

[Distributed commit log - application techniques for transaction processing (2016) #talk](https://www.youtube.com/watch?v=X2g0FFOV2e0&t=9s) - I had higher hopes for this video, but it’s still a good watch. There’s not so much talk about how to structure applications around distributed logs, but rather how to go about making things work within the limitations of [Amazon Kinesis](https://aws.amazon.com/kinesis/), and, to a certain extent [Apache Kafka](https://kafka.apache.org/).

[How to get started with technical public speaking (2017) #talk](http://www.hanselman.com/blog/VIDEOHowToGetStartedWithTechnicalPublicSpeaking.aspx) - technical public speaking is something I want to get into at some point. This talk gives some very solid pointers on how to give such a talk, as well as any presentation. There’s a couple of hints as to how to get started - speak in small groups, inside your company or at colleges and then grow from there.

* * *

[1] So, in all of them?
"Use System.Diagnostics.Trace and DbgView within a WPF-Application"
Tags: csharp, debugging, programing, coding
Published: 2017-08-25 09:29:15

---
title: "Use System.Diagnostics.Trace and DbgView within a WPF-Application" 
published: true
description: A short introduction for System.Diagnostics.Trace and DbgView and how to use it for pritf-debugging for a WPF-application using C#
tags: #csharp, #Debugging, #Programing, #coding
cover_image: https://thepracticaldev.s3.amazonaws.com/i/olwig38astigwko0gkjn.png
---
[This blogpost was first posted here](http://kimkulling.de/2017/03/14/c-use-system-diagnostics-trace-and-dbgview-within-a-wpf-application/)

# TRACE using C/C++ with Win32-API
One of my favorite tools to debug Win32/MFC-Applications with UI was the Win32-call:
```c#
::OutputDebugString( "Test\n" );
```
You can use it to trace debug information withing your application during runtime. Special if you have to analyze some runtime-specific error and you do not have any kind of console / log to do printf-debugging this Win32-Call case save your ass. You only have to run the tool DbgView to monitor these log-entries ( if you want to try it out you can download DbgView [here](https://docs.microsoft.com/en-us/sysinternals/downloads/debugview). 

# TRACE using C# with WPF
Because I am currently working with C# in my job I wanted to use this tool as well for WVF-applications. And of course there is a corresponding API-method in the .NET-framework called:

```c#
Trace.WriteLine( string msg );
```

You can find the documentation [here](https://msdn.microsoft.com/de-de/library/system.diagnostics.trace.writeline(v=vs.110).aspx).

It is easy to use. Just insert your Trace-log-entries in your code. When you want to take a look into your application you can start DbgView to see, what is ongoing. Just make sure, that you have defined:

```c#
#define TRACE
```

at the beginning of your source-file. Here is a small example:

```c#
#define TRACE
 
using System.Diagnosics;
 
class Test {
    static int main() {
        Trace.WriteLine("Hello, world!" );
        Exit(0);
    }
}
```
To check if this works fine just run DbgView and run your application. You should be able to see your post **Hello, world!** there.
Asking for a raise seven months into a job?
Tags: anonymous, advice, work
Published: 2017-08-25 06:22:49

---
title: Asking for a raise seven months into a job?
published: true
description: 
tags: anonymous, advice, work
---

_This is an anonymous question sent in by a member who does not want their name disclosed. Please be thoughtful with your responses, as these are usually tough questions to ask and answer._

> I've only been at my company for seven months but we're a small startup and _a lot_ has happened since I joined. Not only have I taken on a great deal of responsibility, I've also started managing other engineers. While I'm really enjoying my work and don't mind the long hours, I'm wondering if I should be asking for a raise.  

>Half the people I talk to say that I should wait until the one year mark (and use these responsibilities as part of a super strong argument), but the other half say I should address it immediately. I don't want to 'sell myself short' but I also don't want to come off as a selfish team player. And when it comes down to it, I'm perfectly happy with how much I'm making now. Have you been in this situation before?
Interviews without riddles?
Tags: discuss, career, interview
Published: 2017-08-24 21:24:51

---
title: Interviews without riddles?
published: true
description: 
tags: discuss, career, interview
---

Would you guys be interested in a job board only for companies that do take-home assignments (build something that does X) instead of live coding challenges/riddles/puzzles during the interview process?

I'm considering building it but wanted to gauge interest first.
Why you should save the UI for last
Tags: architecture, design, domainlayer, pluginarchitecture
Published: 2017-08-24 18:24:11

---
title: Why you should save the UI for last
published: true 
description: Building applications through a rich domain with UI as a plugin
tags: architecture, design, domain layer,Plug-in architecture
---
*A very common practice in our industry is to first build the UI and tie in the back-end thereafter*. The argument, for the most part, has been that the end-user gets more involved from the start with this approach and thus it gives us confidence that we are indeed building the right product. **One major downfall I've realized with this approach is that we tend to end-up with a poor domain layer or lack of it for that matter**. Since we are so focused on feeding data into our shiny UI. Here is a quick example to illustrate my point. Decouple the UI and the data layer from your application and see how much can be reasoned about with what's left. In other words, when all the bells and whistles are stripped off, what do you have left?  How rich is your domain or what's your domain for that matter? **What is your application about and how apparent is that in your code?**

Ok, so maybe you can make a point that there is such a thing as a two-layered application and that not everything needs to be domain driven. Point taken. **The most compelling reason I've seen for thriving toward a rich domain is that it's easy to test and reason about your application. I find it extremely helpful to think of my application as serving use cases rather than serving data**. Huge difference. And what a better place to exercise your use cases than through a rich domain. 

**So what's a rich domain? I think of it as a layer that speaks my business domain and expresses allowed use cases**.  How rich it is, depends on how versed it is. Therefore, next time you find yourself designing user interfaces prior to expressing use cases to be served, my suggestion is to start from the latter and walk your way up. **Let your UI plug into your domain.**
References from "Writing Clean Code"
Tags: programming, practices
Published: 2017-08-24 17:10:03

---
title: References from "Writing Clean Code"
published: true
description: Additional references from my recent post "Writing Clean Code" contain ing motivation and practices for writing clean code.
tags: programming, practices, meta
canonical_url: https://jason.pureconcepts.net/2017/08/writing-clean-code-references/
---
I held my first of a series of [Workshops by JMac](https://workshopsbyjmac.com) yesterday on *Writing Clean Code*. I plan to edit and release a recording of the workshop over the weekend. In the meantime, I wanted to share some of the references I made during the workshop and in my [previous post](https://dev.to/gonedark/writing-clean-code).

- [*Implementation Patterns*](https://www.amazon.com/Implementation-Patterns-Kent-Beck/dp/0321413091) by Kent Beck
  Filled with principles and practices focused on improving code readability. The first few chapters provide *motivation* for adopting these practices. The remainder of the book contains code samples. It's also the origin of the quote: *"We read code more than we write code"*. For me, this has become the single, biggest motivation for writing clean code.

- [*Hunting for great names in programming*](https://m.signalvnoise.com/hunting-for-great-names-in-programming-16f624c8fc03) by DHH
  Naming things is hard. This post takes us on the journey to find a name which communicates intent. DHH leaves us some breadcrumbs to do so ourselves. While it may seem excessive, taking this journey will improve your vocabulary of names. After just a few times, you'll notice naming things isn't so hard.

- [*Seven Ineffective Coding Habits of Many Programmers*](https://www.infoq.com/presentations/7-ineffective-coding-habits) by Kevlin Henney
  Watch this and if you're not convinced to write clean code, please check your pulse. Kevlin crushes common coding habits with researched examples and straight talk. While he mentions a few practices, the focus is mainly on exposing these *ineffective* habits. Similar to *Implementation Patterns*, this continually motivates me to refine my coding habits.

I plan to host *Part 2* of the *Writing Clean Code* series Wednesday, September 13th. [Sign up now](https://workshopsbyjmac.com) to secure your spot for this free, one hour workshop where I'll demo practices for writing clean code.
unlock HG8347R
Tags: hg8347r, chinaunicom
Published: 2018-02-10 22:38:26

---
title: "unlock HG8347R"
published: true
tags: HG8347R,chinaunicom
canonical_url: 
---

è”é€šå®½å¸¦ç§»æœºä¸€å®šè¦å¸¦ç€æ—§å…‰çŒ«ï¼Œä¸ç®¡æ—§å…‰çŒ«æ˜¯å¥½æ˜¯åæ˜¯æ­»æ˜¯æ´»ã€‚\* 3

æ–°å®¶å®Œæˆå®½å¸¦ç§»æœºï¼Œä¸æ”¶è´¹ï¼Œä½†å¦‚æžœä½ æ²¡æœ‰æ—§å…‰çŒ«çš„è¯ï¼Œå¾—è‡ªå·±è§£å†³ï¼Œæ¯”å¦‚æ·˜å®ä¸€ä¸ªå¤§çº¦50å—ã€‚

æ–°å…‰çŒ«æ˜¯HG8347Rï¼Œæ®è¯´ç¡¬ä»¶é…ç½®ä¸é”™ï¼Œä½†æˆ‘å…³å¿ƒçš„æ˜¯èƒ½å¦ç»§ç»­ä½¿ç”¨è‡ªå·±çš„è·¯ç”±å™¨ï¼Œé»˜è®¤æƒ…å†µä¸‹ä¸èƒ½ï¼Œå› ä¸ºè¿™æ¬¾å…‰çŒ«é›†æˆäº†æ— çº¿è·¯ç”±åŠŸèƒ½ã€‚å¯¹äºŽå¤§å¤šæ•°ç”¨æˆ·æ¥è®²æ˜¯ä¸ªå¥½äº‹å„¿ï¼Œä½†å¯¹äºŽå…¶ä»–ç”¨æˆ·ï¼Œä»–ä»¬å°±ä¸è¿‡å¤šè€ƒè™‘äº†ï¼Œå¥½åœ¨å…‰çŒ«æ²¡é”æ­»ï¼Œå¯ä»¥è‡ªå·±è§£é”ã€‚

éœ€è¦æœ‰å‡ æ¬¾è½¯ä»¶ï¼šåŽä¸ºONTç»„æ’­ç»´æŠ¤å·¥å…·ã€é…ç½®æ–‡ä»¶è§£å¯†å·¥å…·ã€tftp serverï¼Œå¯ä»Ž[è¿™é‡Œ](https://pan.baidu.com/s/1pLfYcJ5)ä¸‹è½½åˆ°ã€‚ç»´æŠ¤å·¥å…·ä½œç”¨æ˜¯å¼€å¯å…‰çŒ«ç»´æŠ¤æ¨¡å¼ï¼Œè¿™æ ·æ‰å¯ä»¥telnetè¿›åŽ»ï¼Œæ‹¿åˆ°é…ç½®æ–‡ä»¶ã€æ¢å¤å‡ºåŽ‚è®¾ç½®ç­‰ã€‚

## å¼€å¯ç»´æŠ¤æ¨¡å¼

1. ç”µè„‘ç½‘çº¿è¿žæŽ¥å…‰çŒ«LAN1å£
2. æ‹”æŽ‰å…‰çŒ«å…‰çº¤ï¼Œæ­¤æ—¶å…‰çŒ«PONä½ç½®äº®çº¢ç¯
3. æ‰“å¼€ONTç»„æ’­å·¥å…·ï¼Œé€‰æ‹©è¿žæŽ¥å…‰çŒ«çš„ç½‘å¡ï¼Œç‚¹å¯åŠ¨
4. ç­‰åˆ°å…‰çŒ«æ‰€æœ‰æŒ‡ç¤ºç¯å…¨äº®åŽï¼Œå…³é—­å…‰çŒ«ç”µæºï¼Œæ­¤æ—¶ç»´æŠ¤æ¨¡å¼å·²å¼€å¯ã€‚å¦‚æžœé•¿æ—¶é—´æ²¡è¿›å…¥ç»´æŠ¤æ¨¡å¼ï¼ˆæ¯”å¦‚è¶…è¿‡äº†2åˆ†é’Ÿï¼‰å¯ä»¥å°è¯•å…³é—­å…‰çŒ«ç”µæºåŽå†æ‰“å¼€

## èŽ·å–é…ç½®æ–‡ä»¶

1. å¯åŠ¨å·²å¼€å¯ç»´æŠ¤æ¨¡å¼çš„å…‰çŒ«
2. ç”µè„‘å¯ä»¥pingé€šå…‰çŒ«ipåŽï¼Œæ‰“å¼€å‘½ä»¤è¡Œ
3. `telnet 192.168.1.1`ï¼Œç”¨æˆ·åæ˜¯ï¼šrootï¼Œå¯†ç æ˜¯ï¼šadmin
4. ç™»å½•åŽåœ¨ç”µè„‘å¼€å¯`tftp server`
5. åœ¨å‘½ä»¤è¡Œä¸­è¾“å…¥ï¼š`backup cfg by tftp svrip 192.168.1.2 remotefile hw_ctree.xml`,å…¶ä¸­`192.168.1.2`æ˜¯ç”µè„‘IPï¼Œå‘½ä»¤å®ŒæˆåŽå¯åœ¨`tftp`è®¾ç½®çš„ç›®å½•ä¸­æ‰¾åˆ°`hw_ctree.xml`æ–‡ä»¶
6. è¿™æ˜¯ä¸€ä¸ªåŠ å¯†åŽçš„gzipæ–‡ä»¶ï¼Œæ­¤æ—¶éœ€è¦ç”¨åˆ°ç¬¬äºŒä¸ªè½¯ä»¶ï¼šé…ç½®æ–‡ä»¶è§£å¯†å·¥å…·
7. è§£å¯†åŽå¾—åˆ°çš„æ–‡ä»¶æ˜¯gzipæ–‡ä»¶ï¼Œç”¨gzipå·¥å…·è§£åŽ‹å¯å¾—åˆ°çœŸæ­£`hw_ctree.xml`
8. åœ¨é…ç½®æ–‡ä»¶ä¸­æ‰¾åˆ°`UserLevel="1"`ï¼Œå°†å…¶ä¿®æ”¹ä¸º`0`ï¼Œè¡¨ç¤ºç‰¹æƒç”¨æˆ·

## æ¢å¤å‡ºåŽ‚è®¾ç½®

å›žåˆ°telnetå¼€å§‹æ¢å¤å‡ºåŽ‚è®¾ç½®

```
su
shell
restorehwmode.sh
exit
reset
```

å¦‚æžœè®¾å¤‡æ²¡é‡å¯åˆ™å¯ä»¥æ‰‹åŠ¨å…³æŽ‰ç”µæºå†æ‰“å¼€

## å¯¼å…¥é…ç½®

1. è®¾å¤‡é‡å¯åŽä¿®æ”¹ç”µè„‘IPä¸º`192.168.100.2`ï¼Œç½‘å…³æ˜¯`192.168.100.1`
2. è®¿é—®`192.168.100.1`ï¼Œä½¿ç”¨é»˜è®¤ç”¨æˆ·åï¼š`telecomadmin`ï¼Œå¯†ç ï¼š`admintelecom`ç™»å½•ï¼Œå¯¼å…¥åˆšåˆšä¿®æ”¹äº†é…ç½®æ–‡ä»¶ï¼Œè®¾å¤‡é‡å¯åŽå³å¯è‡ªåŠ¨èŽ·å–IPåœ°å€

## è®¾ç½®WANæ¡¥æŽ¥

1. è®¿é—®`192.168.1.1`ï¼Œå› ä¸ºé…ç½®æ–‡ä»¶åªä¿®æ”¹äº†ç”¨æˆ·æƒé™æ²¡æœ‰ä¿®æ”¹è´¦å·å¯†ç ï¼Œæ‰€ä»¥å¯ç”¨å…‰çŒ«èƒŒåŽçš„ç”¨æˆ·åå¯†ç ç™»å½•
2. åœ¨WANè®¾ç½®ä¸­æ‰¾åˆ°`2_INTERNET_B_VID_3961`ï¼Œç‚¹å‡»ä¸€ä¸‹å¯ä»¥å±•å¼€ç¼–è¾‘ï¼Œä¿®æ”¹`WANç±»åž‹`ä¸º`WANæ¡¥æŽ¥`å³å¯ä½¿ç”¨è‡ªå·±è·¯ç”±å™¨ï¼Œè·¯ç”±å™¨WANå£æŽ¥å…‰çŒ«LAN1å£ï¼Œä½¿ç”¨è·¯ç”±å™¨è®¤è¯ã€‚ä½¿ç”¨SPEEDTESTæµ‹è¯•é€Ÿåº¦åœ¨100Mbpsï¼Œæ²¡æŽ‰é€Ÿã€‚