`
sitoto
  • 浏览: 120109 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

It seems the user clicked on the 'Stop' button in his browser.

阅读更多
Reported by pierre.b...@gmail.com, Sep 8, 2009
What steps will reproduce the problem?
1. Nginx 6.71
2. Passenger 2.2.4
3. Random page show a 502 Gateway errors with this message

[ pid=2398 file=ext/nginx/HelperServer.cpp:478 time=2009-09-08 14:49:41.259 ]:
  Couldn't forward the HTTP response back to the HTTP client: It seems the
user clicked on the 'Stop' button in his browser.
[ pid=2398 file=ext/nginx/HelperServer.cpp:478 time=2009-09-08 14:49:44.214 ]:
  Couldn't forward the HTTP response back to the HTTP client: It seems the
user clicked on the 'Stop' button in his browser.
*** Exception Errno::EPIPE in Passenger RequestHandler (Broken pipe)
(process 16217):
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/rack/request_handler.rb:108:in
`write'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/rack/request_handler.rb:108:in
`process_request'
        from
/opt/ree/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/response.rb:155:in
`each_line'
        from
/opt/ree/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_controller/response.rb:155:in
`each'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/rack/request_handler.rb:107:in
`process_request'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_request_handler.rb:206:in
`main_loop'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/railz/application_spawner.rb:376:in
`start_request_handler'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/railz/application_spawner.rb:334:in
`handle_spawn_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/utils.rb:182:in
`safe_fork'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/railz/application_spawner.rb:332:in
`handle_spawn_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:351:in
`__send__'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:351:in
`main_loop'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:195:in
`start_synchronously'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:162:in
`start'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/railz/application_spawner.rb:213:in
`start'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/spawn_manager.rb:261:in
`spawn_rails_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server_collection.rb:126:in
`lookup_or_add'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/spawn_manager.rb:255:in
`spawn_rails_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server_collection.rb:80:in
`synchronize'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server_collection.rb:79:in
`synchronize'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/spawn_manager.rb:254:in
`spawn_rails_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/spawn_manager.rb:153:in
`spawn_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/spawn_manager.rb:286:in
`handle_spawn_application'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:351:in
`__send__'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:351:in
`main_loop'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/lib/phusion_passenger/abstract_server.rb:195:in
`start_synchronously'
        from
/opt/ree/lib/ruby/gems/1.8/gems/passenger-2.2.4/bin/passenger-spawn-server:61



What version of Phusion Passenger are you using? Which version of Rails? On
what operating system?
Passenger 2.2.4, Rails 2.3.2, version 1.8.6-20090610, Debian


Comment 1 by pierre.b...@gmail.com, Sep 9, 2009
Same problem with passenger 2.2.5

[ pid=14425 file=ext/nginx/HelperServer.cpp:478 time=2009-09-08 23:12:01.981 ]:
  Couldn't forward the HTTP response back to the HTTP client: It seems the user
clicked on the 'Stop' button in his browser.
*** Exception Errno::EPIPE in Passenger RequestHandler (Broken pipe) (process 14590):

Comment 2 by VDi...@gmail.com, Sep 29, 2009
Confirmed On Ubuntu 9.04, Passenger 2.2.4, Rails 2.3.3,  nginx/0.7.61
Comment 3 by ddenisse...@gmail.com, Oct 9, 2009
Same problem with passenger 2.2.5 Ubuntu 8.04, Rails 2.3.4, nginx/0.7.62

Comment 4 by angi...@gmail.com, Oct 12, 2009
Same problem with passenger-2.2.5, Ruby Enterprise Edition 20090610, Ubuntu 9.04,
Rails 2.3.4, nginx/0.7.62.  I'm using smart spawning.

System was running fine for 3 days.  This morning every request started throwing a
502.  This is my first time w/ a passenger deployment.
Comment 5 by jseib...@gmail.com, Oct 13, 2009
Same issue here. Passenger 2.2.4, Rails 2.3.3. Ubuntu 9.0.4. Apache 2.

This is taking our site down about once a day.
Comment 6 by angi...@gmail.com, Oct 14, 2009
Possible resolution:

Turns out monit was killing my nginx worker threads due to memory consumption.  Since
it was workers and not the master process, we didnt get any monit notifications about
a PID change.

Silly wabbits.
Comment 7 by VDi...@gmail.com, Oct 19, 2009
Apparently the 502 on our site were linux open file descriptor limits. We raised them and so far no more 502.
Comment 9 by ehud...@gmail.com, Oct 29, 2009
confirmed on nginx 0.7.59, passenger 2.2.4.
This is killing us about twice a day. what is actually causing this and are
there any workarounds?

Comment 10 by born...@gmail.com, Dec 13, 2009
I have similar issue in Apache. In my case, this was caused by crawler trying to grab
pdf files which were served by xsendfile by Rails. However normal user access won't
generate this kind of error in error_log.

This is on Apache 2.2.14, Passenger 2.2.7 and Rails 2.3.5.
Comment 11 by andersle...@gmail.com, Jan 22, 2010
Confirmed on
FreeBSD 7.2-RELEASE-p4 #26
Apache/2.2.13
Passenger 2.2.4
Rails 2.2.2

It totally kills all apps running on Passenger, and has happened 4 times on two days.
Comment 12 by project member hongli...@gmail.com, Jan 22, 2010
Can anybody else confirm that raising the OS file descriptor limit helps?
Comment 13 by steve.qu...@gmail.com, Jan 26, 2010
Defect Confirmed on Ubuntu 8.10
Nginx 0.7.64
Passenger 2.2.9
Rails 2.3.5
Ruby 1.9.1p243

This is also killing one of our servers about twice a day - mostly during peak times. This didn't happen when
we ran on ruby 1.8.6 + an older version of passenger (maybe around 2.2.6 or so). We recently upgraded to 1.9
and passenger along with it. Before the upgrade everything ran perfectly.

Does anyone have any news on this problem? It's been around since Sept. Unfortunately starting to look at
alternatives to Passenger because of this

Comment 14 by project member hongli...@gmail.com, Jan 26, 2010
steve.quinlan, have you tried increasing Apache's maximum file descriptor limit?
Comment 15 by steve.qu...@gmail.com, Jan 27, 2010
I'm on nginx. Is there a similar setting?
Comment 16 by project member hongli...@gmail.com, Jan 27, 2010
Yes. Please try increasing the max file descriptor limit.
Comment 17 by steve.qu...@gmail.com, Jan 27, 2010
I've increased the worker_rlimit_nofile setting in nginx.conf to 40000. Let me know if I should pick a better
number.

Not sure how relevant this is, but I have only one application running on this server, and notice that I
frequently get multiple ApplicationSpawners (my understanding is that you get one ApplicationSpawner per
code base).

Today when I made the file descriptor limit change and ran /etc/init.d/nginx reload, I got multiple
PassengerNginxHelperServer also. I had to kill all the processes manually. This may or may not be relevant to
this defect. I saved the passenger-status output if you wish me to post it here or in another report.

In the meantime, I'll post any updates on the progress with the max file descriptor limit.

And thanks for your help!

Comment 18 by steve.qu...@gmail.com, Jan 27, 2010
@honglilai My app just died in the same fashion described above, 80 minutes after making the file descriptor
limit change. So I don't think it made any difference. Here's the passenger memory stats. (Machine is 512 mb
slice, ubuntu)

------- Apache processes --------

### Processes: 0
### Total private dirty RSS: 0.00 MB


---------- Nginx processes ----------
PID    PPID   VMSize   Private  Name
-------------------------------------
10038  1      34.6 MB  0.2 MB   nginx: master process /opt/nginx/sbin/nginx
10039  10038  35.7 MB  1.2 MB   nginx: worker process
10043  10038  35.7 MB  1.3 MB   nginx: worker process
### Processes: 3
### Total private dirty RSS: 2.68 MB


----- Passenger processes ------
PID    VMSize    Private   Name
--------------------------------
10020  24.1 MB   1.4 MB    PassengerNginxHelperServer /opt/ruby-
1.9.1/lib/ruby/gems/1.9.1/gems/passenger-2.2.9 /opt/ruby-1.9.1/bin/ruby 3 4 0 6 0 300 1 www-data 33
33 /tmp/passenger.10017
10035  46.6 MB   9.5 MB    Passenger spawn server
10094  250.4 MB  103.4 MB  Rails: /home/apps/public_html/myapp/current
10369  220.4 MB  0.2 MB    Passenger ApplicationSpawner: /home/apps/public_html/myapp/current
10414  222.7 MB  45.9 MB   Rails: /home/apps/public_html/myapp/current
10422  222.7 MB  45.9 MB   Rails: /home/apps/public_html/myapp/current
10430  222.6 MB  44.3 MB   Rails: /home/apps/public_html/myapp/current
10438  220.4 MB  0.2 MB    Passenger ApplicationSpawner: /home/apps/public_html/myapp/current
### Processes: 8
### Total private dirty RSS: 250.79 MB

Comment 19 by project member hongli...@gmail.com, Jan 27, 2010
You mentioned that it is "killing your server". Does that mean that once the EPIPE
error occurs, it'll keep occurring for everybody until some manual action is taken?

Could you also check whether the Nginx PIDs change after the EPIPE error occurs? For
example I see that your Nginx PIDs are 10038, 10039 and 10043; do any of those three
change?
Comment 20 by steve.qu...@gmail.com, Jan 27, 2010
@honglilai - It would be more accurate to say it is killing my app that my server, although there is only 1 app
running on the server. Once the defect kicks in, all http requests to the app time out. But I'm still able to ssh
to the box and kill processes without lag etc.

I'm not sure if the pids change, so I've taken a note of the nginx pids now, and will report back with the new
nginx pids if/when the problem happens again.

In the meantime, I also made one other change to my nginx.conf, I removed the line that says:
rails_framework_spawner_idle_time: 0

It's the only unusual thing about my nginx.conf - I use default settings for pretty much everything. I'll see if
that has an effect and report back.

Comment 21 by hello%va...@gtempaccount.com, Jan 28, 2010
@honglilai: Nearly 24 hours later, the server feels a lot better since I removed
"rails_framework_spawner_idle_time: 0". There's been no hanging since, and there's a
lot less processes running. The log files show a few of the EPIPE errors happening,
but there's been no visible effect on the server.

Here's the stats:

---------- Nginx processes ----------
PID    PPID   VMSize   Private  Name
-------------------------------------
10786  1      37.9 MB  ?        nginx: master process /opt/nginx/sbin/nginx
12013  10786  37.9 MB  1.3 MB   nginx: worker process
12015  10786  37.9 MB  1.1 MB   nginx: worker process
### Processes: 3
### Total private dirty RSS: 2.40 MB (?)


----- Passenger processes -----
PID    VMSize    Private  Name
-------------------------------
11995  88.1 MB   1.3 MB   PassengerNginxHelperServer
/opt/ruby-1.9.1/lib/ruby/gems/1.9.1/gems/passenger-2.2.9 /opt/ruby-1.9.1/bin/ruby 3 4
0 6 0 300 1 www-data 33 33 /tmp/passenger.10786
12010  46.6 MB   1.9 MB   Passenger spawn server
15430  244.8 MB  97.8 MB  Rails: /home/apps/public_html/myapp/current
### Processes: 3
### Total private dirty RSS: 101.04 MB


This looks a lot healthier than yesterdays output (see above). Is it possible to
confirm if the "rails_framework_spawner_idle_time: 0" setting could be problematic,
or is this just a big coincidence?

Thanks for your help again.


Comment 22 by steve.qu...@gmail.com, Jan 28, 2010
Ooops. The above comment should be posted from steve.quinlan (I posted it on a
different computer than normal)
Steve
Comment 23 by project member hongli...@gmail.com, Jan 28, 2010
It would be very odd if that option is the cause of the problems. Please keep
monitoring the server and report back if there are any problems.
Comment 24 by pierre.b...@gmail.com, Jan 28, 2010
I don't use this option (rails_framework_spawner_idle_time), and i have the problem.
Comment 25 by steve.qu...@gmail.com, Jan 28, 2010
The only other change I made yesterday was the file descriptor limits setting, but that had no observable
improvement as the app hung about an hour later. I'll keep monitoring.
Comment 26 by steve.qu...@gmail.com, Jan 29, 2010
Hi all,
after over 40 successful hours (the longest in a while), the defect occurred again. Here are the stats at the
time of the defect.

---------- Nginx processes ----------
PID    PPID   VMSize   Private  Name
-------------------------------------
10786  1      37.9 MB  ?        nginx: master process /opt/nginx/sbin/nginx
12013  10786  37.9 MB  1.3 MB   nginx: worker process
12015  10786  37.9 MB  1.2 MB   nginx: worker process
### Processes: 3
### Total private dirty RSS: 2.54 MB (?)


----- Passenger processes ------
PID    VMSize    Private   Name
--------------------------------
11995  88.1 MB   1.4 MB    PassengerNginxHelperServer /opt/ruby-
1.9.1/lib/ruby/gems/1.9.1/gems/passenger-2.2.9 /opt/ruby-1.9.1/bin/ruby 3 4 0 6 0 300 1 www-data 33
33 /tmp/passenger.10786
12010  47.1 MB   3.9 MB    Passenger spawn server
19978  247.9 MB  100.5 MB  Rails: /home/apps/public_html/myapp/current
21326  221.6 MB  0.2 MB    Passenger ApplicationSpawner: /home/apps/public_html/myapp/current
21356  223.6 MB  44.6 MB   Rails: /home/apps/public_html/myapp/current
21364  223.6 MB  44.8 MB   Rails: /home/apps/public_html/myapp/current
21372  223.6 MB  44.7 MB   Rails: /home/apps/public_html/myapp/current
21380  221.6 MB  0.2 MB    Passenger ApplicationSpawner: /home/apps/public_html/myapp/current


Note the nginx workers did not change pids (you can compare with the stats from yesterday)

Anytime the problem occurs, there's multiple ApplicationSpawner entries in the stats. When I ran
/etc/init.d/nginx stop, my stats looked like this:

-------- Nginx processes --------

### Processes: 0
### Total private dirty RSS: 0.00 MB


----- Passenger processes -----
PID    VMSize    Private  Name
-------------------------------
12010  47.1 MB   3.9 MB   Passenger spawn server
21326  221.6 MB  0.2 MB   Passenger ApplicationSpawner: /home/apps/public_html/myapp/current
21380  221.6 MB  0.2 MB   Passenger ApplicationSpawner: /home/apps/public_html/myapp/current
### Processes: 3
### Total private dirty RSS: 4.23 MB


Note the application spawners are not dying off. So I'm back to square one on this issue.
Until we get this fixed can anyone suggest a workaround? Maybe a cron job to kill off excess spawners etc.


Comment 27 by project member hongli...@gmail.com, Jan 29, 2010
You can use a cron job to kill off the spawn server once in a while. That should
automatically kill off the ApplicationSpawners too.
Comment 28 by vitalaa...@gmail.com, Jan 29, 2010
Problem confirmed here as well w/ Ubuntu 8.04, Passenger 2.2.5, Rails 2.1.2,
nginx/0.7.61.

I'll be applying the cron job fix tonight and will report back if the problem recurs.
This has brought our high-traffic site down many times, so hopefully the priority can
be bumped up a notch.

Thanks honglilai for your Passenger work - very much appreciated.
Comment 29 by project member hongli...@gmail.com, Jan 30, 2010
vitalaaron, are your symptoms the same? When the problem occurs are there multiple
ApplicationSpawners for the same app?
Comment 30 by steve.qu...@gmail.com, Feb 2, 2010
My app has survived since Friday without a crash since I implemented the cron job to kill the spawn server.
However, I'm still hesistant to say that the problem is fixed. 

I thought I'd post my cron info if anyone wants it

# add this to root's cron job list
0 * * * * /opt/nginx/kill_spawn_server.sh

#kill_spawn_server.sh
#!/bin/sh
kill -9 `ps -ef | grep 'spawn server' | grep -v grep | awk '{print $2}'`


Look forward to finding out more about the root cause of this defect,
Steve
Comment 31 by project member hongli...@gmail.com, Feb 2, 2010
I haven't been able to find the cause until now, but Phusion Passenger 3 will come
with a bunch of cleanup changes for the spawn server. Maybe those changes would make
your kill cron job obsolete.
Comment 32 by steve.qu...@gmail.com, Feb 2, 2010
Thanks for the help @honglilai, I look forward to Passenger 3
Comment 33 by project member hongli...@gmail.com, Feb 7, 2010
I suspect that this problem might have something to do with a long-standing Safari
bug: https://bugs.webkit.org/show_bug.cgi?id=5760

Could you disable keep-alive, temporarily disable the cron job, and check whether the
problem still occurs?
Comment 34 by steve.qu...@gmail.com, Feb 8, 2010
@honglilai - I've disabled keep-alive (nginx users should set keepalive_timeout 0;) and turned off the cron job.
I'll monitor the situation and report back. By the way, the cron job has been a very successful, but not quite
perfect, workaround.
Comment 35 by steve.qu...@gmail.com, Feb 9, 2010
Since i disabled the keep alive + cron job, I haven't had any problems *yet*. However, looking at the nginx log
file, I see that the Errno::EPIPE exception is still being thrown. Can I presume that the problem isn't fixed then,
or does it still have a chance of being ok?

---
[ pid=1588 file=ext/nginx/HelperServer.cpp:478 time=2010-02-08 20:00:40.315 ]:
Couldn't forward the HTTP response back to the HTTP client: It seems the user clicked on the 'Stop' button in
his browser.
*** Exception Errno::EPIPE in Passenger RequestHandler (Broken pipe) (process 3140):
---

Comment 36 by project member hongli...@gmail.com, Feb 9, 2010
Before EPIPE errors were correlated with downtime, but now they don't, right? If so
then the EPIPE errors that you're getting now might be legit, i.e. people actually
clicked on Stop.

If you set the error log level to 'debug' then you can see whether it's legit or not,
like this:

  error_log  logs/error.log debug;

You should see something along the lines of this:

  2010/02/02 12:09:27 [info] 56470#0: *23 kevent() reported that client closed
prematurely connection, so upstream connection is closed too while sending request to
upstream, client: 127.0.0.1, server: towertop.test, request: "GET
/web_apps/L1VzZXJzL2hvbmdsaS9Qcm9qZWN0cy90b3dlcnRvcA/logs/tail HTTP/1.1", upstream:
"passenger:unix:/passenger_helper_server:", host: "towertop.test:8000", referrer:
"http://towertop.test:8000/web_apps/L1VzZXJzL2hvbmdsaS9Qcm9qZWN0cy90b3dlcnRvcA/logs"

Notice the "reported that client closed prematurely connection, so upstream
connection is closed too while sending request to upstream" part, this indicates that
Nginx has detect that the HTTP client closed the connection.
Comment 37 by project member hongli...@gmail.com, Feb 11, 2010
Merging this issue with #435.
Status: Duplicate
Mergedinto: 435
Comment 38 by vitalaa...@gmail.com, Feb 18, 2010
@honglilai

I just posted a reply to your above question in  issue #435  since this issue was
merged with it. Sorry for delay - I really thought I had voted for the issue but
apparently I hadn't, as I wasn't getting notifications.
分享到:
评论

相关推荐

    UE(官方下载)

    This tutorial will show you how to access the information you need in your browser by simply highlighting your text in the edit window and clicking your toolbar button How to install UE3 UE3 is the ...

    MFC简易计算器程序

    ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON10, OnButton10) ON...

    3D-picking

    Picking is the process of finding objects in your scene based on user input. Most commonly, you want to determine what object a user has clicked with his mouse. The 2D mouse coordinates serve as a ...

    如何控制列表控件的一行颜色显示

    NM_CLICK The control is clicked with the left mouse button. NM_DBLCLK The control is double-clicked with the left mouse button. NM_RCLICK The control is clicked with the right mouse button. NM_RDBLCLK...

    PLSQL.Developer v11.0.0.1762 主程序+ v10中文包+keygen

    The filter expression can be entered or modified directly in the filter field above the Object Browser, or you can click on the filter field button to invoke the filter options form. The form has an ...

    wxPython in Action (2006).pdf

    point), I clicked on the link, and the next link, and the next, until I finally ended up at the Python 1.2 Tutorial document. Three hours later I was con- verted from being the local C++ guru to a ...

    weifenluo.winformsui.docking 2.9(最新源码&例子)

    2. Opt-in ShowAutoHideContentOnHover feature to require a tab to be clicked on to show autohide content vice the current behavior of showing on hover. 3. Fixed issues with the sample application: ...

    The Unified Modeling Language Reference Manual, Second Edition

    annotations on diagrams can be clicked to jump to the referenced articles. The Adobe Reader previous view arrow can be used to restore a previous view after clicking a link. Readers are also ...

    曲线拟合工具CurveExpert 1.0

    until after they were clicked with the mouse, which makes it terribly hard for non-mouse users. Fixed. + If the current path was changed from CurveExpert, the help file was not found. Fixed. ...

    VB编程资源大全(英文源码 控制)

    millisec.zip Count Time in Milliseconds <END><br>60,getday.zip Get the Day of Week that a Day Falls On<END><br>61,shellend.zip Notify the User when a Shelled Process Ends <END><br>62,varlist....

    Making Games with Python & PyGame.pdf(with code)

    T ABLE OF C ONTENTS Who is this book for? ........................................................................................................................ i About This Book ......................

    VB编程资源大全(英文源码 控件)

    and more versitile than the one that comes with VB.<END><br>36,button1.zip Change Button Appearance when Clicked<END><br>37,ToolbarSample.zip This is the mutli form level handling toolbar ...

    Creating the OutLookRichEdit Control

    At this level, if you build the project and run it, you can see the rich edit control with linked text, but nothing would happen if you clicked on the link. To Show a dialog while the link is clicked...

    jQuery 1.4 Animation Techniques

    Since the first jQuery homepage in 2006, an interactive example introduced visitors to jQuery with a single line of code, and a button to run that code. When clicked, it added a class to a hidden ...

    vb 2008 抽奖程序 word文档

    ' If the user clicked OK in the dialog and ' a .txt file was selected, open it. If openFileDialog1.ShowDialog() = DialogResult.OK Then TextBox1.Text = ReadFile(openFileDialog1.FileName) ...

    Android代码-android-RavenServer

    Raven Server Open an activity in WeChat! ...Then an activity will the url is clicked or scaned. Alos, a page target page will be opened. The story about this demo > Now, I'm writing

    留学生React Native计算器作业-待视频演示.zip

    Once clicked, it should display a correct answer on the screen. 1. Add a comment line to the beginning of your code to include your name, something like this: // HW2 by your name This will serve as ...

    Android代码-CalendarPicker

    Show it when a day be clicked. v1.1.2: Remove no needed example code and intent filter which create no needed launch icon. demo apk Add it in your root build.gradle at the end of repositories: ...

    Android代码-android-edittextpassword

    The icon works like a toggle, once clicked it show/hide the password. Target platforms API level 14 or later Latest version Version 1.0.0 (APR. 12, 2016) Usage In order to use the library, there ...

    VclZip pro v3.10.1

    PLEASE TAKE A LOOK AT THE "WHAT's NEW IN THIS VERSION" LINK IN THE HELP FILE AS IT HAS CONVENIENT LINKS TO ALL OF THE NEW TOPICS. ==================== Version 3.10 Build 1 - Several bug fixes. - ...

Global site tag (gtag.js) - Google Analytics