markdown:
Yang Yo Seob, giọng ca chính của nhóm Beast
Choi Min Ho của Shinne
Taecyeon của 2PM
Eli, vị trí rapper của nhóm UKiss
Jae Hyo của Block B
in Woon của nhóm 2AM
Kim Hyung Jun của nhóm SS501
Lee Hong Ki của FT Island
Lee Sung Min của nhóm Super Junior
Tae Yang của Big Bang
P.V
**Xem thêm video clip : ** [Phẫn nộ clip: Ông bố đánh dã man vào đầu đứa con nhỏ](http://video.nguoiduatin.vn/q54hySpIUg/phan-no-clip-ong-bo-danh-da-man-vao-dau-dua-con-nho) **Đọc** [tin tức](http://www.nguoiduatin.vn/)sự kiện [tin mới](http://www.nguoiduatin.vn/)nhất, nhanh và hay nhất trong ngày tại chuyên mục: [Tin tức 24h](http://www.nguoiduatin.vn/gl/24h-qua)
Mời quý độc giả
[đọc báo](http://www.nguoiduatin.vn/) qua [RSS](http://www.nguoiduatin.vn/trang-chu.rss) để có thêm nhiều thông tin hơn. ![](http://www.nguoiduatin.vn/images/default/icon_video.png)
[VIDEO HOT NHẤT](#)
### Tin mới nhất
![ ](http://www.nguoiduatin.vn/tracking-8098.gif?a=1410989465)


markdown:
**Cloud Của Tui có gì hot?**
- Thêm Bài hát/Playlist yêu thích vào Cloud.
- Tạo Playlist riêng theo sở thích âm nhạc.
- Tự động đồng bộ nếu sử dụng một tài khoản Cloud cho nhiều thiết bị.
- Nghe nhạc Offline dễ dàng mà không sợ phải tìm kiếm Playlist để tải lại nếu thay đổi thiết bị.

WARC-Type: response

Content-Type: application/http; msgtype=response

Set-Cookie: NCTNPLS=5cbcdf8dc06a98326d46b1fd1e95f301;Path=/;Domain=.nhaccuatui.com;Expires=Fri, 17-Oct-2014 21:41:55 GMT;HttpOnly

Content-Type: text/html; charset=UTF-8

P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'

Content-Encoding: gzip

Server: nginx+

Connection: close


Set-Cookie: NCTNPLS=f5d0cd99fdebd7d8384b036fdbb851c0;Path=/;Domain=.nhaccuatui.com;Expires=Fri, 17-Oct-2014 21:46:13 GMT;HttpOnly


markdown:
[Trang chủ](/) [Sách](/books.html) [Tác giả](/tac-gia.html) [Bạn đọc](/ban-doc.html) [Giới thiệu](/gioi-thieu.html)
Đặt hàng: 04.3.9434490 (Từ thứ 2 đến thứ 6)
[muasach@nxbkimdong.com.vn](mailto:muasach@nxbkimdong.com.vn) [Đăng nhập](javascript:void(0)) [Tạo tài khoản](javascript:void(0))
### Tóm tắt nội dung:
Con gì ăn no, bụng to mắt híp? Con gì ăn cỏ, đầu có hai sừng? Những câu đố là phương tiện tốt nhất để bé học về đặc điểm của các sự vật, hiện tượng xung quanh mình. Khi giải đố, bé được rèn luyện trí não một cách chủ động, tích cực, lại vừa được chơi đùa. Bộ sách Câu đố nhà trẻ - mẫu giáo là tuyển tập các câu đố dạng thơ hoặc văn vần về những sự vật rất gần gũi, gắn bó với trẻ, phù hợp với khả năng tư duy của lứa tuổi 2 - 6. Bố mẹ, anh chị có thể đọc cho trẻ nghe để đố trẻ, hoặc để trẻ đố lẫn nhau, đều rất vui! Sách kèm minh hoạ đẹp, ngộ nghĩnh, phù hợp với lứa tuổi. Sách được in bằng giấy carton cứng cáp nên bé có thể chơi đùa thoải mái mà không sợ làm hỏng, rách.
Lớn lên, bé sẽ nhận ra rằng người ta không chỉ di chuyển từ nơi này đến nơi khác bằng đôi chân, mà còn có nhiều loại máy móc giúp sức nữa. Những thứ máy móc đó được gọi chung là phương tiện giao thông. Bé thử đố nhau xem ai biết nhiều loại phương tiện giao thông hơn nào?
Lớn lên, bé sẽ nhận ra rằng người ta không chỉ di chuyển từ nơi này đến nơi khác bằng đôi chân, mà còn có nhiều loại máy móc giúp sức nữa. Những thứ máy móc đó được gọi chung là phương tiện giao thông. Bé thử đố nhau xem ai biết nhiều loại phương tiện giao thông hơn nào?
### Sách nên mua kèm
[Copyright MAXXmarketing Webdesigner GmbH](http://www.webdesigner-profi.de/)
### HỖ TRỢ KHÁCH HÀNG
|
|![]()
|
|
Hotline: (08)4 3943.4490
(8h30-17h30 - Từ thứ 2 đến thứ 6)
|
|![]()
|
|
Email: This e-mail address is being protected from spambots. You need JavaScript enabled to view it.
|
|![]()
|
|
Hỗ trợ qua:
|
|![]()
|
|![](/images/nxb.logo2.png)
Cơ quan chủ quản: Nhà xuất bản Kim Đồng - Trụ sở: 55 Quang Trung, Hà Nội
## Ý KIẾN CỦA BẠN

WARC-Truncated: length

P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

Cache-Control: no-cache

Pragma: no-cache

Content-Type: text/html; charset=utf-8


markdown:
tình hình là việc cho mua trả góp áp dụng với xe mới thì nhan nhản rồi, em muốn các bác trong OF chỉ giáo về mua xe cũ trả góp.
Cụ thể là có trung tâm nào bán xe cũ trả góp không? và thủ tục như thế nào...các bác giúp em phát.
xin được hậu tạ....
tình hình là việc cho mua trả góp áp dụng với xe mới thì nhan nhản rồi, em muốn các bác trong OF chỉ giáo về mua xe cũ trả góp.
Cụ thể là có trung tâm nào bán xe cũ trả góp không? và thủ tục như thế nào...các bác giúp em phát.
xin được hậu tạ....
Em ké với! Xe cũ-Mới, nếu người ngoài tỉnh thì có đc ko, nếu đc thì phải gánh theo những gì ngoài xiền để rước đc vợ 2 ?
Bác Chưa đăng ký ơi ! Trả E bút để E ký cho Min/Mod đi lào.
Không có cụ nào giúp được cụ chủ thớt ợ? Em thì chịu
Cách tốt nhất để quên đi 1 tình yêu sâu sắc là yêu 1 người khác sâu sắc hơn!
thêm vodka cho các bác hào hứng giúp...zo^
em cũng chịu thua he he he
Up phát nào!
Thật sự là khó bởi vì muốn mua bất cứ cái gì bằng phương án trả góp đều phải định giá tài sản mà xe cũ thì khó lắm. Xe mới thì có giá trên thị trường rồi chênh lệch không nhiều lắm con xe cũ thì... Bác chủ thớt thử hỏi bác namthang xem sao hinh như bác ấy là dân ngân hàng. Chúc bác sớm toại nguyện
Cái này khó nhỉ
, Bác xem có ai quen cần bán xe cũ, đặt vấn đề với họ có khi thủ tục kô phức tạp đâu
Nghề của em là đóng gạch các cụ ạ
Em chuyên cung cấp gạch block - 094.663.8088 các cụ nhé.
Trả góp bản chất là làm với ngân hàng, chứ không phải làm với người bán xe, thực chất là bác đi vay ngân hàng thôi, và ngân hàng đại diện cho bác trả nốt phần thiếu cho người bán.
Nếu bác có tín chấp hoặc thế chấp là có thể vay ngân hàng.
Khi bác vay được thì mua xe cũ hay xe mới có khác gì nhau đâu.
Quan trọng là mua xe cũ trả góp thì phải nộp thuế TB và sang tên người mua . (Mà cái này thì các cụ đi mua xe cũ thường xác định là không sang tên
)
Các cụ cần mua xe cũ trả góp thì cứ liên hệ với em (PM trước để lấy số liên lạc).
Em cũng xin thưa trước là:
1 - Người mua phải sang tên chính chủ mới thế chấp để vay vốn ngân hàng được
2 - Ngân hàng chỉ nhận tài sản đảm bảo là xe không có nguồn gốc Trung quốc và Ngày đăng ký lần đầu không quá 5 năm ( tính đến thời điểm vay vốn)
Trường hợp riêng: Các xe "xịn"như Bim, Mẹc, Cam...nói chung là dòng xe sang thì có thể vẫn nhận làm TSĐB nếu xe còn mới và chất lượng còn tốt, tính chuyển nhượng xe trong thị trường dễ dàng
3 - Phòng Thẩm định tài sản đảm bảo của NH sẽ định giá xe cũ và số tiền cho vay tối đa = 50% Giá trị đính giá đó.
Đi Nhanh Đi Ẩu - Là Đi Không Về
Em đang định cưới 1 E starex thiếu khoảng 40%.Có bác nào on OF help E nhé.
Hiện có 1 cụ cũng đang nghía cái thớt này. (0 lái chính và 1 lái phụ)

Set-Cookie: bb_lastactivity=0; expires=Thu, 17-Sep-2015 21:33:42 GMT; path=/

Cache-Control: private, post-check=0, pre-check=0, max-age=0


markdown:
Hội thảo “Thúc đẩy ứng dụng và phát triển phần mềm mã nguồn mở” do Bộ TTTT phối hợp cùng Sở TTTT TP.HCM tổ chức tại TP.HCM vào ngày 22/9/2011, cho thấy tình hình ứng dụng phần mềm mã nguồn mở (PMNM) ở Việt Nam vẫn chỉ là kỳ vọng, vì thực tế có quá nhiều khó khăn và đặt ra lắm thách thức không dễ gì vượt qua.
Phát biểu tại lễ khai mạc, TS. Lê Mạnh Hà, Phó chủ tịch UBND TP.HCM, nhấn mạnh, phần mềm quan trọng là phải dễ sử dụng, đáp ứng tốt cho công việc của người dùng bất kể là “đóng” hay “mở”. Từ thực tiễn quản lý nhiều năm giữ vai trò Giám đốc Sở TTTT TP.HCM, ông Hà khẳng định: Việc triển khai ứng dụng phần mềm nói chung rất khó, phần mềm nguồn đóng đã là cực kỳ khó, và PMNM sẽ khó hơn rất nhiều.
Những khó khăn trong quá trình triển khai ứng dụng PMNM trong khối các cơ quan nhà nước được TS. Nguyễn Thanh Tuyên, Phó vụ trưởng, Vụ CNTT, Bộ TTTT cụ thể hóa: Lãnh đạo thiếu quyết tâm nên thiếu kinh phí triển khai, không giám sát chặt chẽ vấn đề vi phạm bản quyền phần mềm, thiếu các quy định và chế tài sử dụng PMNM; người dùng khó bỏ thói quen sử dụng phần mềm “lậu”; khâu đào tạo chỉ chú trọng vào PM nguồn đóng dẫn đến nhân lực chuyên sâu về PMNM thiếu và yếu.
Ông Nguyễn Văn Hiền, Tổng giám đốc công ty iNet Solutions, phát biểu dưới góc độ của doanh nghiệp cho rằng Việt Nam chưa có thị trường cho ứng dụng PMNM phát triển. Theo ông Hiền thì DN phải thấy thị trường mới nhảy vào tham gia. DN không mặn mà, thị trường sao có thể định hình và phát triển?? Bài toán “con gà và quả trứng” nảy sinh từ đây.
Về phía người dùng, phát biểu của một cán bộ phường tại hội thảo lại cho thấy một thực tế các đơn vị dù có muốn ứng dụng PMNM cũng khó thực hiện vì thiếu sự hỗ trợ kỹ thuật. Vị này thẳng thắn cho biết sau khi tham gia khóa tập huấn về PMNM, về địa phương không biết làm gì, muốn hỏi không có địa chỉ, ai hay trung tâm nào hỗ trợ, phải chăng là Sở TTTT, ông bày tỏ băn khoăn.
“Chưa có sự đồng bộ giữa việc cài đặt, đào tạo và sử dụng PMNM”, ông Tuyên nhấn mạnh khi đề cập đến tình hình sử dụng Ubuntu, OpenOffice thay cho Windows, MS Office tại các địa phương. Ông còn chỉ ra rằng tài liệu về PMNM còn thiếu, chưa được thẩm định, độ tin cậy thấp.
Chia sẻ với người viết, ông Nguyễn Quang Thanh, Giám đốc Trung tâm phát triển hạ tầng CNTT, Sở TTTT Đà Nẵng ví von: “Nói đến nguồn mở là nói đến kỳ vọng”. Ý ông là chỉ những ai “nhảy” vào lĩnh vực này mới thấy hết cái “xương” của nó.
Đồng quan điểm với ông Thanh, một chuyên gia đã bình luận “ứng dụng PMNM như đường hầm không thấy lối ra”. Theo ông này thì chính sách nhà nước về ứng dụng PMNM không mạnh được là vì các nhà quản lý quá hiểu điều đó. “Diễn giả cứ nói, cử tọa cứ nghe, nhưng thực tế… khó”, vị này kết luận.
Đồng cảm với ông Hiền, ông Thanh chỉ ra một thực tế bất cập là nhiều người hiểu sai khi nghĩ rằng đã “mở” là miễn phí. Trong khi bản chất của doanh nghiệp là lợi nhuận. Nếu người dùng chỉ nghĩ tới miễn phí thì DN cung cấp sống bằng cái gì, ông Thanh nói.
Người viết từng biết cách đây nhiều năm đã có công ty tính chuyện kinh doanh mảng PMNM nhắm vào các DN. Ý tưởng của công ty là đóng gói (thành các đĩa CD) và cung cấp trọn bộ từ hệ điều hành cho đến ứng dụng văn phòng và các tiện ích đi kèm, tất cả đều là PMNM. Nguồn thu chính nhắm từ việc cung cấp dịch vụ triển khai và hỗ trợ kỹ thuật. Nhưng cuối cùng, chỉ sau một thời gian ngắn, DN phải bỏ mảng kinh doanh này vì tâm lý “miễn phí” của khách hàng đối với PMNM, một vị giám đốc của công ty cho biết, và nói thêm, bán phần mềm thương mại nguồn đóng vừa khỏe lại có thể tăng thêm nguồn thu từ các dịch vụ giá trị gia tăng khác.
Dịch vụ đóng vai trò quan trọng trong việc triển khai ứng dụng PMNM. Ông Thanh kể, có những dự án liên quan đến ứng dụng chuyên ngành, sau khi tìm hiểu thấy giải pháp PMNM rất phù hợp nhưng ngặt nỗi trong nước không có nhà cung cấp dịch vụ. Bản chào giá của công ty nước ngoài tính theo tiền dịch vụ của nước họ nên áp dụng vào Việt Nam không phù hợp vì quá cao. Thế là lại trở về với “đóng”.
Phát biểu của vị cán bộ cấp phường ở trên cũng phản ánh một thực tế là cộng đồng nguồn mở ở Việt Nam còn quá nhỏ nên người dùng chưa biết đến, cũng chưa đủ mạnh để hỗ trợ tạo niềm tin nơi người dùng. Trong khi đây là yếu tố hết sức quan trọng để PMNM phát triển sâu rộng hơn.
Một điều có thể thấy rõ từ hội thảo là vấn đề tuyên truyền chưa được chú trọng. Như hội thảo được tổ chức cũng chỉ là để trao đổi (thực ra cũng chỉ diễn xuôi theo phần “trao” là chính, và thời gian thì quá ngắn) trong giới CNTT với nhau, hầu như PMNM chưa “chạm” được tới cộng đồng người dùng máy tính rộng lớn.
Ngày hội tự do phần mềm nguồn mở (Software Freedom Day – SFD), một sự kiện thường niên được cộng đồng nguồn mở trên toàn thế giới tổ chức để tôn vinh Phần mềm tự do và Mã nguồn mở (FOSS) khi diễn ra tại Việt Nam (thường được tổ chức một điểm ở Hà Nội và một điểm ở TP.HCM) hàng năm cũng chỉ thu hút được vài trăm người, chủ yếu là sinh viên, tham dự… cho vui. Cũng có thuyết trình, cũng có gặp mặt trao đổi kinh nghiệm, nhưng cũng chỉ loanh quanh trong phạm vi hẹp của vài nhóm nhỏ với nhau.
Nhìn chung lại, về ứng dụng PMNM, chính sách nhà nước yếu, thị trường không có, DN thiếu mặn mà, người dùng thờ ơ, cộng đồng không phát triển… trong khi người dùng DN cũng như cá nhân vẫn phải cần ứng dụng phục vụ những công việc hàng ngày của họ. Điều đó dẫn đến việc ứng dụng PMNM ở Việt Nam vẫn chỉ là kỳ vọng.
Bài 2: Phát triển PMNM: hướng đi nào.

Cache-Control: private

Set-Cookie: .RATED_ARTICLE=; expires=Fri, 17-Oct-2014 21:35:23 GMT; path=/


markdown:
|
|![]()
|
|![]()
|
|
||
|||
|||
|||
|||
|||
|||
|||
|
|
|
|
|
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
|
|
|Hỗ trợ khách hàng|
|
|
| Emal: |
![]()
|
|![]()
|
Địa chỉ: 86/6 Thích Quảng Đức, P.5, Q.Phú Nhuận, Tp.HCM.
|
Tel: (84.8)3995 1033 - 3995 1021 - Fax: (84.8)3995 1024
Hotline: 0919.221.009
Emal:
Copyright © SaigonToserco.com. All rights reserved.

Server: Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 mod_fcgid/2.3.6

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Content-Type: text/html


markdown:
|
|
|
|
|
|
1 """SCons.Node 2 3 The Node package for the SCons software construction utility. 4 5 This is, in many ways, the heart of SCons. 6 7 A Node is where we encapsulate all of the dependency information about 8 any thing that SCons can build, or about any thing which SCons can use 9 to build some other thing. The canonical "thing," of course, is a file, 10 but a Node can also represent something remote (like a web page) or 11 something completely abstract (like an Alias). 12 13 Each specific type of "thing" is specifically represented by a subclass 14 of the Node base class: Node.FS.File for files, Node.Alias for aliases, 15 etc. Dependency information is kept here in the base class, and 16 information specific to files/aliases/etc. is in the subclass. The 17 goal, if we've done this correctly, is that any type of "thing" should 18 be able to depend on any other type of "thing." 19 20 """ 21 22 # 23 # Copyright (c) 2001 - 2014 The SCons Foundation 24 # 25 # Permission is hereby granted, free of charge, to any person obtaining 26 # a copy of this software and associated documentation files (the 27 # "Software"), to deal in the Software without restriction, including 28 # without limitation the rights to use, copy, modify, merge, publish, 29 # distribute, sublicense, and/or sell copies of the Software, and to 30 # permit persons to whom the Software is furnished to do so, subject to 31 # the following conditions: 32 # 33 # The above copyright notice and this permission notice shall be included 34 # in all copies or substantial portions of the Software. 35 # 36 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 37 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 38 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 39 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 40 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 41 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 42 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 43 44 [__revision__] = "src/engine/SCons/Node/__init__.py 2014/08/24 12:12:31 garyo" 45 46 import collections 47 import [copy] 48 from itertools import chain 49 50 import [SCons] . [Debug] 51 from [SCons] . [Debug] import [logInstanceCreation] 52 import [SCons] . [Executor] 53 import [SCons] . [Memoize] 54 import [SCons] . [Util] 55 56 from [SCons] . [Debug] import [Trace] 57 60 61 # Set to false if we're doing a dry run. There's more than one of these 62 # little treats 63 [do_store_info] = True 64 65 # Node states 66 # 67 # These are in "priority" order, so that the maximum value for any 68 # child/dependency of a node represents the state of that node if 69 # it has no builder of its own. The canonical example is a file 70 # system directory, which is only up to date if all of its children 71 # were up to date. 72 [no_state] = 0 73 [pending] = 1 74 [executing] = 2 75 [up_to_date] = 3 76 [executed] = 4 77 [failed] = 5 78 79 [StateString] = { 80 0 : "no_state" , 81 1 : "pending" , 82 2 : "executing" , 83 3 : "up_to_date" , 84 4 : "executed" , 85 5 : "failed" , 86 } 87 88 # controls whether implicit dependencies are cached: 89 [implicit_cache] = 0 90 91 # controls whether implicit dep changes are ignored: 92 [implicit_deps_unchanged] = 0 93 94 # controls whether the cached implicit deps are ignored: 95 [implicit_deps_changed] = 0 96 97 # A variable that can be set to an interface-specific function be called 98 # to annotate a Node with information about its creation. 99 [-] def [do_nothing] ( node ) : pass 100 101 Annotate = [do_nothing] 102 103 # Gets set to 'True' if we're running in interactive mode. Is 104 # currently used to release parts of a target's info during 105 # clean builds and update runs (see release_target_info). 106 [interactive] = False 107 108 # Classes for signature info for Nodes. 109 110 [-] class [NodeInfoBase] ( object ) : 111 """ 112 The generic base class for signature information for a Node. 113 114 Node subclasses should subclass NodeInfoBase to provide their own 115 logic for dealing with their own Node-specific signature information. 116 """ 117 [current_version_id] = 1 119 # Create an object attribute from the class attribute so it ends up 120 # in the pickled data in the .sconsign file. 121 self . _version_id = self . [current_version_id] 123 try : 124 [field_list] = self . [field_list] 125 except AttributeError : 126 return 127 for f in [field_list] : 128 try : 129 delattr ( self , f ) 130 except AttributeError : 131 pass 132 try : 133 func = getattr ( node , 'get_' + f ) 134 except AttributeError : 135 pass 136 else : 137 setattr ( self , f , func ( ) ) 141 self . __dict__ . [update] ( other . __dict__ ) 143 if [field_list] is None : 144 try : 145 [field_list] = self . [field_list] 146 except AttributeError : 147 [field_list] = sorted ( self . __dict__ . [keys] ( ) ) 148 fields = [ ] 149 for field in [field_list] : 150 try : 151 f = getattr ( self , field ) 152 except AttributeError : 153 f = None 154 f = str ( f ) 155 if names : 156 f = field + ': ' + f 157 fields . [append] ( f ) 158 return fields 159 160 [-] class [BuildInfoBase] ( object ) : 161 """ 162 The generic base class for build information for a Node. 163 164 This is what gets stored in a .sconsign file for each target file. 165 It contains a NodeInfo instance for this node (signature information 166 that's specific to the type of Node) and direct attributes for the 167 generic build stuff we have to track: sources, explicit dependencies, 168 implicit dependencies, and action information. 169 """ 170 [current_version_id] = 1 172 # Create an object attribute from the class attribute so it ends up 173 # in the pickled data in the .sconsign file. 174 self . _version_id = self . [current_version_id] 175 self . bsourcesigs = [ ] 176 self . bdependsigs = [ ] 177 self . bimplicitsigs = [ ] 178 self . bactsig = None 180 self . __dict__ . [update] ( other . __dict__ ) 181 183 """The base Node class, for entities that we know how to 184 build, or use to build other Nodes. 185 """ 186 187 if [SCons] . [Memoize] . [use_memoizer] : 188 [__metaclass__] = [SCons] . [Memoize] . [Memoized_Metaclass] 189 190 [memoizer_counters] = [ ] 191 194 196 if [SCons] . [Debug] . [track_instances] : [logInstanceCreation] ( self , 'Node.Node' ) 197 # Note that we no longer explicitly initialize a self.builder 198 # attribute to None here. That's because the self.builder 199 # attribute may be created on-the-fly later by a subclass (the 200 # canonical example being a builder to fetch a file from a 201 # source code system like CVS or Subversion). 202 203 # Each list of children that we maintain is accompanied by a 204 # dictionary used to look up quickly whether a node is already 205 # present in the list. Empirical tests showed that it was 206 # fastest to maintain them as side-by-side Node attributes in 207 # this way, instead of wrapping up each list+dictionary pair in 208 # a class. (Of course, we could always still do that in the 209 # future if we had a good reason to...). 210 self . sources = [ ] # source files used to build node 211 self . sources_set = [set] ( ) 212 self . _specific_sources = False 213 self . depends = [ ] # explicit dependencies (from Depends) 214 self . depends_set = [set] ( ) 215 self . ignore = [ ] # dependencies to ignore 216 self . ignore_set = [set] ( ) 217 self . prerequisites = None 218 self . implicit = None # implicit (scanned) dependencies (None means not scanned yet) 219 self . waiting_parents = [set] ( ) 220 self . waiting_s_e = [set] ( ) 221 self . ref_count = 0 222 self . wkids = None # Kids yet to walk, when it's an array 223 224 self . env = None 225 self . state = [no_state] 226 self . precious = None 227 self . pseudo = False 228 self . noclean = 0 229 self . nocache = 0 230 self . cached = 0 # is this node pulled from cache? 231 self . always_build = None 232 self . includes = None 233 self . attributes = self . [Attrs] ( ) # Generic place to stick information about the Node. 234 self . side_effect = 0 # true iff this node is a side effect 235 self . side_effects = [ ] # the side effects of building this target 236 self . linked = 0 # is this node linked to the variant directory? 237 238 self . [clear_memoized_values] ( ) 239 240 # Let the interface in which the build engine is embedded 241 # annotate this Node with its own info (like a description of 242 # what line in what file created the node, for example). 243 Annotate ( self ) 244 245 [-] def [disambiguate] ( self , must_exist = None ) : 247 248 [-] def [get_suffix] ( self ) : 250 251 [memoizer_counters] . [append] ( [SCons] . [Memoize] . [CountValue] ( 'get_build_env' ) ) 252 253 [-] def [get_build_env] ( self ) : 254 """Fetch the appropriate Environment to build this node. 255 """ 256 try : 257 return self . _memo [ 'get_build_env' ] 258 except KeyError : 259 pass 260 [result] = self . [get_executor] ( ) . [get_build_env] ( ) 261 self . _memo [ 'get_build_env' ] = [result] 262 return [result] 263 264 [-] def [get_build_scanner_path] ( self , scanner ) : 265 """Fetch the appropriate scanner path for this node.""" 266 return self . [get_executor] ( ) . [get_build_scanner_path] ( scanner ) 267 268 [-] def [set_executor] ( self , executor ) : 271 272 [-] def [get_executor] ( self , create = 1 ) : 273 """Fetch the action executor for this node. Create one if 274 there isn't already one, and requested to do so.""" 275 try : 276 executor = self . executor 277 except AttributeError : 278 if not create : 279 raise 280 try : 281 act = self . builder . action 282 except AttributeError : 283 executor = [SCons] . [Executor] . [Null] ( targets = [ self ] ) 284 else : 285 executor = [SCons] . [Executor] . [Executor] ( act , 286 self . env or self . builder . env , 287 [ self . builder . overrides ] , 288 [ self ] , 289 self . sources ) 290 self . executor = executor 291 return executor 292 293 [-] def [executor_cleanup] ( self ) : 294 """Let the executor clean up any cached information.""" 295 try : 296 executor = self . [get_executor] ( create = None ) 297 except AttributeError : 298 pass 299 else : 300 if executor is not None : 301 executor . [cleanup] ( ) 302 303 [-] def [reset_executor] ( self ) : 304 "Remove cached executor; forces recompute when needed." 305 try : 306 delattr ( self , 'executor' ) 307 except AttributeError : 308 pass 309 310 [-] def [push_to_cache] ( self ) : 314 315 [-] def [retrieve_from_cache] ( self ) : 316 """Try to retrieve the node's content from a cache 317 318 This method is called from multiple threads in a parallel build, 319 so only do thread safe stuff here. Do thread unsafe stuff in 320 built(). 321 322 Returns true if the node was successfully retrieved. 323 """ 324 return 0 325 326 # 327 # Taskmaster interface subsystem 328 # 329 330 [-] def [make_ready] ( self ) : 331 """Get a Node ready for evaluation. 332 333 This is called before the Taskmaster decides if the Node is 334 up-to-date or not. Overriding this method allows for a Node 335 subclass to be disambiguated if necessary, or for an implicit 336 source builder to be attached. 337 """ 338 pass 339 341 """Prepare for this Node to be built. 342 343 This is called after the Taskmaster has decided that the Node 344 is out-of-date and must be rebuilt, but before actually calling 345 the method to build the Node. 346 347 This default implementation checks that explicit or implicit 348 dependencies either exist or are derived, and initializes the 349 BuildInfo structure that will hold the information about how 350 this node is, uh, built. 351 352 (The existence of source files is checked separately by the 353 Executor, which aggregates checks for all of the targets built 354 by a specific action.) 355 356 Overriding this method allows for for a Node subclass to remove 357 the underlying file from the file system. Note that subclass 358 methods should call this base class method to get the child 359 check and the BuildInfo structure. 360 """ 361 if self . depends is not None : 362 for [d] in self . depends : 363 if [d] . [missing] ( ) : 364 [msg] = "Explicit dependency `%s' not found, needed by target `%s'." 365 raise [SCons] . [Errors] . [StopError] ( [msg] % ( [d] , self ) ) 366 if self . implicit is not None : 367 for i in self . implicit : 368 if i . [missing] ( ) : 369 [msg] = "Implicit dependency `%s' not found, needed by target `%s'." 370 raise [SCons] . [Errors] . [StopError] ( [msg] % ( i , self ) ) 371 self . binfo = self . [get_binfo] ( ) 372 374 """Actually build the node. 375 376 This is called by the Taskmaster after it's decided that the 377 Node is out-of-date and must be rebuilt, and after the prepare() 378 method has gotten everything, uh, prepared. 379 380 This method is called from multiple threads in a parallel build, 381 so only do thread safe stuff here. Do thread unsafe stuff 382 in built(). 383 384 """ 385 try : 386 self . [get_executor] ( ) ( self , ** kw ) 387 except [SCons] . [Errors] . [BuildError] , [e] : 388 [e] . node = self 389 raise 390 392 """Called just after this node is successfully built.""" 393 394 # Clear the implicit dependency caches of any Nodes 395 # waiting for this Node to be built. 396 for parent in self . waiting_parents : 397 parent . implicit = None 398 399 self . [clear] ( ) 400 401 if self . pseudo : 402 if self . [exists] ( ) : 403 raise [SCons] . [Errors] . [UserError] ( "Pseudo target " + str ( self ) + " must not exist" ) 404 else : 405 if not self . [exists] ( ) and [do_store_info] : 406 [SCons] . [Warnings] . [warn] ( [SCons] . [Warnings] . [TargetNotBuiltWarning] , 407 "Cannot find target " + str ( self ) + " after building" ) 408 self . ninfo . [update] ( self ) 409 411 """Called just after this node has been visited (with or 412 without a build).""" 413 try : 414 binfo = self . binfo 415 except AttributeError : 416 # Apparently this node doesn't need build info, so 417 # don't bother calculating or storing it. 418 pass 419 else : 420 self . ninfo . [update] ( self ) 421 self . [store_info] ( ) 422 423 [-] def [release_target_info] ( self ) : 424 """Called just after this node has been marked 425 up-to-date or was built completely. 426 427 This is where we try to release as many target node infos 428 as possible for clean builds and update runs, in order 429 to minimize the overall memory consumption. 430 431 By purging attributes that aren't needed any longer after 432 a Node (=File) got built, we don't have to care that much how 433 many KBytes a Node actually requires...as long as we free 434 the memory shortly afterwards. 435 436 @see: built() and File.release_target_info() 437 """ 438 pass 439 440 # 441 # 442 # 443 444 [-] def [add_to_waiting_s_e] ( self , node ) : 446 447 [-] def [add_to_waiting_parents] ( self , node ) : 448 """ 449 Returns the number of nodes added to our waiting parents list: 450 1 if we add a unique waiting parent, 0 if not. (Note that the 451 returned values are intended to be used to increment a reference 452 count, so don't think you can "clean up" this function by using 453 True and False instead...) 454 """ 455 wp = self . waiting_parents 456 if node in wp : 457 return 0 458 wp . add ( node ) 459 return 1 460 461 [-] def [postprocess] ( self ) : 462 """Clean up anything we don't need to hang onto after we've 463 been built.""" 464 self . [executor_cleanup] ( ) 465 self . waiting_parents = [set] ( ) 466 468 """Completely clear a Node of all its cached state (so that it 469 can be re-evaluated by interfaces that do continuous integration 470 builds). 471 """ 472 # The del_binfo() call here isn't necessary for normal execution, 473 # but is for interactive mode, where we might rebuild the same 474 # target and need to start from scratch. 475 self . [del_binfo] ( ) 476 self . [clear_memoized_values] ( ) 477 self . ninfo = self . [new_ninfo] ( ) 478 self . [executor_cleanup] ( ) 479 try : 480 delattr ( self , '_calculated_sig' ) 481 except AttributeError : 482 pass 483 self . includes = None 484 485 [-] def [clear_memoized_values] ( self ) : 487 488 [-] def [builder_set] ( self , builder ) : 494 495 [-] def [has_builder] ( self ) : 496 """Return whether this Node has a builder or not. 497 498 In Boolean tests, this turns out to be a *lot* more efficient 499 than simply examining the builder attribute directly ("if 500 node.builder: ..."). When the builder attribute is examined 501 directly, it ends up calling __getattr__ for both the __len__ 502 and __nonzero__ attributes on instances of our Builder Proxy 503 class(es), generating a bazillion extra calls and slowing 504 things down immensely. 505 """ 506 try : 507 b = self . builder 508 except AttributeError : 509 # There was no explicit builder for this Node, so initialize 510 # the self.builder attribute to None now. 511 b = self . builder = None 512 return b is not None 513 514 [-] def [set_explicit] ( self , is_explicit ) : 516 517 [-] def [has_explicit_builder] ( self ) : 518 """Return whether this Node has an explicit builder 519 520 This allows an internal Builder created by SCons to be marked 521 non-explicit, so that it can be overridden by an explicit 522 builder that the user supplies (the canonical example being 523 directories).""" 524 try : 525 return self . is_explicit 526 except AttributeError : 527 self . is_explicit = None 528 return self . is_explicit 529 530 [-] def [get_builder] ( self , default_builder = None ) : 531 """Return the set builder, or a specified default value""" 532 try : 533 return self . builder 534 except AttributeError : 535 return default_builder 536 537 [multiple_side_effect_has_builder] = [has_builder] 538 539 [-] def [is_derived] ( self ) : 540 """ 541 Returns true if this node is derived (i.e. built). 542 543 This should return true only for nodes whose path should be in 544 the variant directory when duplicate=0 and should contribute their build 545 signatures when they are used as source files to other derived files. For 546 example: source with source builders are not derived in this sense, 547 and hence should not return true. 548 """ 549 return self . [has_builder] ( ) or self . side_effect 550 551 [-] def [alter_targets] ( self ) : 555 556 [-] def [get_found_includes] ( self , env , scanner , path ) : 557 """Return the scanned include lines (implicit dependencies) 558 found in this node. 559 560 The default is no implicit dependencies. We expect this method 561 to be overridden by any subclass that can be scanned for 562 implicit dependencies. 563 """ 564 return [ ] 565 566 [-] def [get_implicit_deps] ( self , env , scanner , path ) : 567 """Return a list of implicit dependencies for this node. 568 569 This method exists to handle recursive invocation of the scanner 570 on the implicit dependencies returned by the scanner, if the 571 scanner's recursive flag says that we should. 572 """ 573 if not scanner : 574 return [ ] 575 576 # Give the scanner a chance to select a more specific scanner 577 # for this Node. 578 #scanner = scanner.select(self) 579 580 nodes = [ self ] 581 seen = { } 582 seen [ self ] = 1 583 deps = [ ] 584 while nodes : 585 n = nodes . pop ( 0 ) 586 [d] = [ [x] for [x] in n . [get_found_includes] ( env , scanner , [path] ) if [x] not in seen ] 587 if [d] : 588 deps . [extend] ( [d] ) 589 for n in [d] : 590 seen [ n ] = 1 591 nodes . [extend] ( scanner . [recurse_nodes] ( [d] ) ) 592 593 return deps 594 595 [-] def [get_env_scanner] ( self , env , kw = { } ) : 596 return env . [get_scanner] ( self . [scanner_key] ( ) ) 597 598 [-] def [get_target_scanner] ( self ) : 600 601 [-] def [get_source_scanner] ( self , node ) : 602 """Fetch the source scanner for the specified node 603 604 NOTE: "self" is the target being built, "node" is 605 the source file for which we want to fetch the scanner. 606 607 Implies self.has_builder() is true; again, expect to only be 608 called from locations where this is already verified. 609 610 This function may be called very often; it attempts to cache 611 the scanner found to improve performance. 612 """ 613 scanner = None 614 try : 615 scanner = self . builder . source_scanner 616 except AttributeError : 617 pass 618 if not scanner : 619 # The builder didn't have an explicit scanner, so go look up 620 # a scanner from env['SCANNERS'] based on the node's scanner 621 # key (usually the file extension). 622 scanner = self . [get_env_scanner] ( self . [get_build_env] ( ) ) 623 if scanner : 624 scanner = scanner . [select] ( node ) 625 return scanner 626 627 [-] def [add_to_implicit] ( self , deps ) : 628 if not hasattr ( self , 'implicit' ) or self . implicit is None : 629 self . implicit = [ ] 630 self . implicit_set = [set] ( ) 631 self . [_children_reset] ( ) 632 self . [_add_child] ( self . implicit , self . implicit_set , deps ) 633 635 """Scan this node's dependents for implicit dependencies.""" 636 # Don't bother scanning non-derived files, because we don't 637 # care what their dependencies are. 638 # Don't scan again, if we already have scanned. 639 if self . implicit is not None : 640 return 641 self . implicit = [ ] 642 self . implicit_set = [set] ( ) 643 self . [_children_reset] ( ) 644 if not self . [has_builder] ( ) : 645 return 646 647 build_env = self . [get_build_env] ( ) 648 executor = self . [get_executor] ( ) 649 650 # Here's where we implement --implicit-cache. 651 if [implicit_cache] and not [implicit_deps_changed] : 652 implicit = self . [get_stored_implicit] ( ) 653 if implicit is not None : 654 # We now add the implicit dependencies returned from the 655 # stored .sconsign entry to have already been converted 656 # to Nodes for us. (We used to run them through a 657 # source_factory function here.) 658 659 # Update all of the targets with them. This 660 # essentially short-circuits an N*M scan of the 661 # sources for each individual target, which is a hell 662 # of a lot more efficient. 663 for tgt in executor . [get_all_targets] ( ) : 664 tgt . [add_to_implicit] ( implicit ) 665 666 if [implicit_deps_unchanged] or self . [is_up_to_date] ( ) : 667 return 668 # one of this node's sources has changed, 669 # so we must recalculate the implicit deps for all targets 670 for tgt in executor . [get_all_targets] ( ) : 671 tgt . implicit = [ ] 672 tgt . implicit_set = [set] ( ) 673 674 # Have the executor scan the sources. 675 executor . [scan_sources] ( self . builder . source_scanner ) 676 677 # If there's a target scanner, have the executor scan the target 678 # node itself and associated targets that might be built. 679 scanner = self . [get_target_scanner] ( ) 680 if scanner : 681 executor . [scan_targets] ( scanner ) 682 683 [-] def [scanner_key] ( self ) : 685 686 [-] def [select_scanner] ( self , scanner ) : 687 """Selects a scanner for this Node. 688 689 This is a separate method so it can be overridden by Node 690 subclasses (specifically, Node.FS.Dir) that *must* use their 691 own Scanner and don't select one the Scanner.Selector that's 692 configured for the target. 693 """ 694 return scanner . [select] ( self ) 695 700 701 # 702 # SIGNATURE SUBSYSTEM 703 # 704 705 NodeInfo = [NodeInfoBase] 706 BuildInfo = [BuildInfoBase] 707 711 713 try : 714 return self . ninfo 715 except AttributeError : 716 self . ninfo = self . [new_ninfo] ( ) 717 return self . ninfo 718 722 724 """ 725 Fetch a node's build information. 726 727 node - the node whose sources will be collected 728 cache - alternate node to use for the signature cache 729 returns - the build signature 730 731 This no longer handles the recursive descent of the 732 node's children's signatures. We expect that they're 733 already built and updated by someone else, if that's 734 what's wanted. 735 """ 736 try : 737 return self . binfo 738 except AttributeError : 739 pass 740 741 binfo = self . [new_binfo] ( ) 742 self . binfo = binfo 743 744 executor = self . [get_executor] ( ) 745 ignore_set = self . ignore_set 746 747 if self . [has_builder] ( ) : 748 binfo . bact = str ( executor ) 749 binfo . bactsig = [SCons] . [Util] . MD5signature ( executor . [get_contents] ( ) ) 750 751 if self . _specific_sources : 752 sources = [ ] 753 for s in self . sources : 754 if s not in ignore_set : 755 sources . [append] ( s ) 756 else : 757 sources = executor . [get_unignored_sources] ( self , self . ignore ) 758 seen = [set] ( ) 759 bsources = [ ] 760 bsourcesigs = [ ] 761 for s in sources : 762 if not s in seen : 763 seen . add ( s ) 764 bsources . [append] ( s ) 765 bsourcesigs . [append] ( s . [get_ninfo] ( ) ) 766 binfo . bsources = bsources 767 binfo . bsourcesigs = bsourcesigs 768 769 depends = self . depends 770 dependsigs = [ ] 771 for [d] in depends : 772 if [d] not in ignore_set : 773 dependsigs . [append] ( [d] . [get_ninfo] ( ) ) 774 binfo . bdepends = depends 775 binfo . bdependsigs = dependsigs 776 777 implicit = self . implicit or [ ] 778 implicitsigs = [ ] 779 for i in implicit : 780 if i not in ignore_set : 781 implicitsigs . [append] ( i . [get_ninfo] ( ) ) 782 binfo . bimplicit = implicit 783 binfo . bimplicitsigs = implicitsigs 784 785 return binfo 786 788 """Delete the build info from this node.""" 789 try : 790 delattr ( self , 'binfo' ) 791 except AttributeError : 792 pass 793 795 try : 796 return self . ninfo . csig 797 except AttributeError : 798 ninfo = self . [get_ninfo] ( ) 799 ninfo . csig = [SCons] . [Util] . MD5signature ( self . [get_contents] ( ) ) 800 return self . ninfo . csig 801 802 [-] def [get_cachedir_csig] ( self ) : 803 return self . [get_csig] ( ) 804 805 [-] def [store_info] ( self ) : 806 """Make the build signature permanent (that is, store it in the 807 .sconsign file or equivalent).""" 808 pass 809 810 [-] def [do_not_store_info] ( self ) : 812 813 [-] def [get_stored_info] ( self ) : 815 816 [-] def [get_stored_implicit] ( self ) : 819 820 # 821 # 822 # 823 824 [-] def [set_precious] ( self , precious = 1 ) : 827 828 [-] def [set_pseudo] ( self , pseudo = True ) : 831 832 [-] def [set_noclean] ( self , noclean = 1 ) : 833 """Set the Node's noclean value.""" 834 # Make sure noclean is an integer so the --debug=stree 835 # output in Util.py can use it as an index. 836 self . noclean = noclean and 1 or 0 837 838 [-] def [set_nocache] ( self , nocache = 1 ) : 839 """Set the Node's nocache value.""" 840 # Make sure nocache is an integer so the --debug=stree 841 # output in Util.py can use it as an index. 842 self . nocache = nocache and 1 or 0 843 844 [-] def [set_always_build] ( self , always_build = 1 ) : 847 852 854 """Does this node exist locally or in a repositiory?""" 855 # There are no repositories by default: 856 return self . [exists] ( ) 857 859 return not self . [is_derived] ( ) and\ 860 not self . linked and\ 861 not self . [rexists] ( ) 862 866 867 [-] def [add_dependency] ( self , depend ) : 868 """Adds dependencies.""" 869 try : 870 self . [_add_child] ( self . depends , self . depends_set , depend ) 871 except TypeError , [e] : 872 [e] = [e] . args [ 0 ] 873 if [SCons] . [Util] . is_List ( [e] ) : 874 s = list ( map ( str , [e] ) ) 875 else : 876 s = str ( [e] ) 877 raise [SCons] . [Errors] . [UserError] ( "attempted to add a non-Node dependency to %s:\n\t%s is a %s, not a Node" % ( str ( self ) , s , type ( [e] ) ) ) 878 879 [-] def [add_prerequisite] ( self , prerequisite ) : 880 """Adds prerequisites""" 881 if self . prerequisites is None : 882 self . prerequisites = [SCons] . [Util] . [UniqueList] ( ) 883 self . prerequisites . [extend] ( prerequisite ) 884 self . [_children_reset] ( ) 885 886 [-] def [add_ignore] ( self , depend ) : 887 """Adds dependencies to ignore.""" 888 try : 889 self . [_add_child] ( self . ignore , self . ignore_set , depend ) 890 except TypeError , [e] : 891 [e] = [e] . args [ 0 ] 892 if [SCons] . [Util] . is_List ( [e] ) : 893 s = list ( map ( str , [e] ) ) 894 else : 895 s = str ( [e] ) 896 raise [SCons] . [Errors] . [UserError] ( "attempted to ignore a non-Node dependency of %s:\n\t%s is a %s, not a Node" % ( str ( self ) , s , type ( [e] ) ) ) 897 898 [-] def [add_source] ( self , source ) : 899 """Adds sources.""" 900 if self . _specific_sources : 901 return 902 try : 903 self . [_add_child] ( self . sources , self . sources_set , source ) 904 except TypeError , [e] : 905 [e] = [e] . args [ 0 ] 906 if [SCons] . [Util] . is_List ( [e] ) : 907 s = list ( map ( str , [e] ) ) 908 else : 909 s = str ( [e] ) 910 raise [SCons] . [Errors] . [UserError] ( "attempted to add a non-Node as source of %s:\n\t%s is a %s, not a Node" % ( str ( self ) , s , type ( [e] ) ) ) 911 912 [-] def [_add_child] ( self , collection , set , child ) : 913 """Adds 'child' to 'collection', first checking 'set' to see if it's 914 already present.""" 915 #if type(child) is not type([]): 916 # child = [child] 917 #for c in child: 918 # if not isinstance(c, Node): 919 # raise TypeError, c 920 added = None 921 for c in child : 922 if c not in [set] : 923 [set] . add ( c ) 924 collection . [append] ( c ) 925 added = 1 926 if added : 927 self . [_children_reset] ( ) 928 929 [-] def [set_specific_source] ( self , source ) : 930 self . [add_source] ( source ) 931 self . _specific_sources = True 932 934 """Add a node to the list of kids waiting to be evaluated""" 935 if self . wkids is not None : 936 self . wkids . [append] ( wkid ) 937 938 [-] def [_children_reset] ( self ) : 939 self . [clear_memoized_values] ( ) 940 # We need to let the Executor clear out any calculated 941 # build info that it's cached so we can re-calculate it. 942 self . [executor_cleanup] ( ) 943 944 [memoizer_counters] . [append] ( [SCons] . [Memoize] . [CountValue] ( '_children_get' ) ) 945 946 [-] def [_children_get] ( self ) : 947 try : 948 return self . _memo [ 'children_get' ] 949 except KeyError : 950 pass 951 952 # The return list may contain duplicate Nodes, especially in 953 # source trees where there are a lot of repeated #includes 954 # of a tangle of .h files. Profiling shows, however, that 955 # eliminating the duplicates with a brute-force approach that 956 # preserves the order (that is, something like: 957 # 958 # u = [] 959 # for n in list: 960 # if n not in u: 961 # u.append(n)" 962 # 963 # takes more cycles than just letting the underlying methods 964 # hand back cached values if a Node's information is requested 965 # multiple times. (Other methods of removing duplicates, like 966 # using dictionary keys, lose the order, and the only ordered 967 # dictionary patterns I found all ended up using "not in" 968 # internally anyway...) 969 if self . ignore_set : 970 iter = chain . from_iterable ( filter ( None , [ self . sources , self . depends , self . implicit ] ) ) 971 972 [children] = [ ] 973 for i in iter : 974 if i not in self . ignore_set : 975 [children] . [append] ( i ) 976 else : 977 [children] = self . [all_children] ( [scan] = 0 ) 978 979 self . _memo [ 'children_get' ] = [children] 980 return [children] 981 982 [-] def [all_children] ( self , scan = 1 ) : 983 """Return a list of all the node's direct children.""" 984 if [scan] : 985 self . [scan] ( ) 986 987 # The return list may contain duplicate Nodes, especially in 988 # source trees where there are a lot of repeated #includes 989 # of a tangle of .h files. Profiling shows, however, that 990 # eliminating the duplicates with a brute-force approach that 991 # preserves the order (that is, something like: 992 # 993 # u = [] 994 # for n in list: 995 # if n not in u: 996 # u.append(n)" 997 # 998 # takes more cycles than just letting the underlying methods 999 # hand back cached values if a Node's information is requested 1000 # multiple times. (Other methods of removing duplicates, like 1001 # using dictionary keys, lose the order, and the only ordered 1002 # dictionary patterns I found all ended up using "not in" 1003 # internally anyway...) 1004 return list ( chain . from_iterable ( filter ( None , [ self . sources , self . depends , self . implicit ] ) ) ) 1005 1007 """Return a list of the node's direct children, minus those 1008 that are ignored by this node.""" 1009 if [scan] : 1010 self . [scan] ( ) 1011 return self . [_children_get] ( ) 1012 1015 1018 1019 [-] def [state_has_changed] ( self , target , prev_ni ) : 1020 return ( self . state != [SCons] . [Node] . [up_to_date] ) 1021 1023 env = self . env 1024 if not env : 1025 import [SCons] . [Defaults] 1026 env = [SCons] . [Defaults] . DefaultEnvironment ( ) 1027 return env 1028 1029 [-] def [changed_since_last_build] ( self , target , prev_ni ) : 1030 """ 1031 1032 Must be overridden in a specific subclass to return True if this 1033 Node (a dependency) has changed since the last time it was used 1034 to build the specified target. prev_ni is this Node's state (for 1035 example, its file timestamp, length, maybe content signature) 1036 as of the last time the target was built. 1037 1038 Note that this method is called through the dependency, not the 1039 target, because a dependency Node must be able to use its own 1040 logic to decide if it changed. For example, File Nodes need to 1041 obey if we're configured to use timestamps, but Python Value Nodes 1042 never use timestamps and always use the content. If this method 1043 were called through the target, then each Node's implementation 1044 of this method would have to have more complicated logic to 1045 handle all the different Node types on which it might depend. 1046 """ 1047 raise NotImplementedError 1048 1051 1053 """ 1054 Returns if the node is up-to-date with respect to the BuildInfo 1055 stored last time it was built. The default behavior is to compare 1056 it against our own previously stored BuildInfo, but the stored 1057 BuildInfo from another Node (typically one in a Repository) 1058 can be used instead. 1059 1060 Note that we now *always* check every dependency. We used to 1061 short-circuit the check by returning as soon as we detected 1062 any difference, but we now rely on checking every dependency 1063 to make sure that any necessary Node information (for example, 1064 the content signature of an #included .h file) is updated. 1065 1066 The allowcache option was added for supporting the early 1067 release of the executor/builder structures, right after 1068 a File target was built. When set to true, the return 1069 value of this changed method gets cached for File nodes. 1070 Like this, the executor isn't needed any longer for subsequent 1071 calls to changed(). 1072 1073 @see: FS.File.changed(), FS.File.release_target_info() 1074 """ 1075 t = 0 1076 if t : [Trace] ( 'changed(%s [%s], %s)' % ( self , classname ( self ) , node ) ) 1077 if node is None : 1078 node = self 1079 1080 [result] = False 1081 1082 bi = node . [get_stored_info] ( ) . binfo 1083 then = bi . bsourcesigs + bi . bdependsigs + bi . bimplicitsigs 1084 [children] = self . [children] ( ) 1085 1086 diff = len ( [children] ) - len ( then ) 1087 if diff : 1088 # The old and new dependency lists are different lengths. 1089 # This always indicates that the Node must be rebuilt. 1090 # We also extend the old dependency list with enough None 1091 # entries to equal the new dependency list, for the benefit 1092 # of the loop below that updates node information. 1093 then . [extend] ( [ None ] * diff ) 1094 if t : [Trace] ( ': old %s new %s' % ( len ( then ) , len ( [children] ) ) ) 1095 [result] = True 1096 1097 for child , prev_ni in zip ( [children] , then ) : 1098 if child . [changed_since_last_build] ( self , prev_ni ) : 1099 if t : [Trace] ( ': %s changed' % child ) 1100 [result] = True 1101 1102 contents = self . [get_executor] ( ) . [get_contents] ( ) 1103 if self . [has_builder] ( ) : 1104 import [SCons] . [Util] 1105 newsig = [SCons] . [Util] . MD5signature ( contents ) 1106 if bi . bactsig != newsig : 1107 if t : [Trace] ( ': bactsig %s != newsig %s' % ( bi . bactsig , newsig ) ) 1108 [result] = True 1109 1110 if not [result] : 1111 if t : [Trace] ( ': up to date' ) 1112 1113 if t : [Trace] ( '\n' ) 1114 1115 return [result] 1116 1117 [-] def [is_up_to_date] ( self ) : 1118 """Default check for whether the Node is current: unknown Node 1119 subtypes are always out of date, so they will always get built.""" 1120 return None 1121 1122 [-] def [children_are_up_to_date] ( self ) : 1123 """Alternate check for whether the Node is current: If all of 1124 our children were up-to-date, then this Node was up-to-date, too. 1125 1126 The SCons.Node.Alias and SCons.Node.Python.Value subclasses 1127 rebind their current() method to this method.""" 1128 # Allow the children to calculate their signatures. 1129 self . binfo = self . [get_binfo] ( ) 1130 if self . always_build : 1131 return None 1132 state = 0 1133 for kid in self . [children] ( None ) : 1134 s = kid . [get_state] ( ) 1135 if s and ( not state or s > state ) : 1136 state = s 1137 return ( state == 0 or state == [SCons] . [Node] . [up_to_date] ) 1138 1139 [-] def [is_literal] ( self ) : 1140 """Always pass the string representation of a Node to 1141 the command interpreter literally.""" 1142 return 1 1143 1144 [-] def [render_include_tree] ( self ) : 1145 """ 1146 Return a text representation, suitable for displaying to the 1147 user, of the include tree for the sources of this node. 1148 """ 1149 if self . [is_derived] ( ) : 1150 env = self . [get_build_env] ( ) 1151 if env : 1152 for s in self . sources : 1153 scanner = self . [get_source_scanner] ( s ) 1154 if scanner : 1155 [path] = self . [get_build_scanner_path] ( scanner ) 1156 else : 1157 [path] = None 1158 def f ( node , env = env , scanner = scanner , path = [path] ) : 1159 return node . [get_found_includes] ( env , scanner , [path] ) 1160 return [SCons] . [Util] . render_tree ( s , f , 1 ) 1161 else : 1162 return None 1163 1164 [-] def [get_abspath] ( self ) : 1165 """ 1166 Return an absolute path to the Node. This will return simply 1167 str(Node) by default, but for Node types that have a concept of 1168 relative path, this might return something different. 1169 """ 1170 return str ( self ) 1171 1172 [-] def [for_signature] ( self ) : 1173 """ 1174 Return a string representation of the Node that will always 1175 be the same for this particular Node, no matter what. This 1176 is by contrast to the __str__() method, which might, for 1177 instance, return a relative path for a file Node. The purpose 1178 of this method is to generate a value to be used in signature 1179 calculation for the command line used to build a target, and 1180 we use this method instead of str() to avoid unnecessary 1181 rebuilds. This method does not need to return something that 1182 would actually work in a command line; it can return any kind of 1183 nonsense, so long as it does not change. 1184 """ 1185 return str ( self ) 1186 1187 [-] def [get_string] ( self , for_signature ) : 1188 """This is a convenience function designed primarily to be 1189 used in command generators (i.e., CommandGeneratorActions or 1190 Environment variables that are callable), which are called 1191 with a for_signature argument that is nonzero if the command 1192 generator is being called to generate a signature for the 1193 command line, which determines if we should rebuild or not. 1194 1195 Such command generators should use this method in preference 1196 to str(Node) when converting a Node to a string, passing 1197 in the for_signature parameter, such that we will call 1198 Node.for_signature() or str(Node) properly, depending on whether 1199 we are calculating a signature or actually constructing a 1200 command line.""" 1201 if [for_signature] : 1202 return self . [for_signature] ( ) 1203 return str ( self ) 1204 1205 [-] def [get_subst_proxy] ( self ) : 1206 """ 1207 This method is expected to return an object that will function 1208 exactly like this Node, except that it implements any additional 1209 special features that we would like to be in effect for 1210 Environment variable substitution. The principle use is that 1211 some Nodes would like to implement a __getattr__() method, 1212 but putting that in the Node type itself has a tendency to kill 1213 performance. We instead put it in a proxy and return it from 1214 this method. It is legal for this method to return self 1215 if no new functionality is needed for Environment substitution. 1216 """ 1217 return self 1218 1220 if not self . [exists] ( ) : 1221 return "building `%s' because it doesn't exist\n" % self 1222 1223 if self . always_build : 1224 return "rebuilding `%s' because AlwaysBuild() is specified\n" % self 1225 1226 old = self . [get_stored_info] ( ) 1227 if old is None : 1228 return None 1229 1230 old = old . binfo 1231 old . [prepare_dependencies] ( ) 1232 1233 try : 1234 old_bkids = old . bsources + old . bdepends + old . bimplicit 1235 old_bkidsigs = old . bsourcesigs + old . bdependsigs + old . bimplicitsigs 1236 except AttributeError : 1237 return "Cannot explain why `%s' is being rebuilt: No previous build information found\n" % self 1238 1239 new = self . [get_binfo] ( ) 1240 1241 new_bkids = new . bsources + new . bdepends + new . bimplicit 1242 new_bkidsigs = new . bsourcesigs + new . bdependsigs + new . bimplicitsigs 1243 1244 osig = dict ( zip ( old_bkids , old_bkidsigs ) ) 1245 nsig = dict ( zip ( new_bkids , new_bkidsigs ) ) 1246 1247 # The sources and dependencies we'll want to report are all stored 1248 # as relative paths to this target's directory, but we want to 1249 # report them relative to the top-level SConstruct directory, 1250 # so we only print them after running them through this lambda 1251 # to turn them into the right relative Node and then return 1252 # its string. 1253 def stringify ( s , E = self . dir . [Entry] ) : 1254 if hasattr ( s , 'dir' ) : 1255 return str ( E ( s ) ) 1256 return str ( s ) 1257 1258 lines = [ ] 1259 1260 removed = [ [x] for [x] in old_bkids if not [x] in new_bkids ] 1261 if removed : 1262 removed = list ( map ( stringify , removed ) ) 1263 [fmt] = "`%s' is no longer a dependency\n" 1264 lines . [extend] ( [ [fmt] % s for s in removed ] ) 1265 1266 for k in new_bkids : 1267 if not k in old_bkids : 1268 lines . [append] ( "`%s' is a new dependency\n" % stringify ( k ) ) 1269 elif k . [changed_since_last_build] ( self , osig [ k ] ) : 1270 lines . [append] ( "`%s' changed\n" % stringify ( k ) ) 1271 1272 if len ( lines ) == 0 and old_bkids != new_bkids : 1273 lines . [append] ( "the dependency order changed:\n" + 1274 "%sold: %s\n" % ( ' ' * 15 , list ( map ( stringify , old_bkids ) ) ) + 1275 "%snew: %s\n" % ( ' ' * 15 , list ( map ( stringify , new_bkids ) ) ) ) 1276 1277 if len ( lines ) == 0 : 1278 def fmt_with_title ( title , strlines ) : 1279 lines = strlines . split ( '\n' ) 1280 sep = '\n' + ' ' * ( 15 + len ( title ) ) 1281 return ' ' * 15 + title + sep . join ( lines ) + '\n' 1282 if old . bactsig != new . bactsig : 1283 if old . bact == new . bact : 1284 lines . [append] ( "the contents of the build action changed\n" + 1285 fmt_with_title ( 'action: ' , new . bact ) ) 1286 else : 1287 lines . [append] ( "the build action changed:\n" + 1288 fmt_with_title ( 'old: ' , old . bact ) + 1289 fmt_with_title ( 'new: ' , new . bact ) ) 1290 1291 if len ( lines ) == 0 : 1292 return "rebuilding `%s' for unknown reasons\n" % self 1293 1294 preamble = "rebuilding `%s' because" % self 1295 if len ( lines ) == 1 : 1296 return "%s %s" % ( preamble , lines [ 0 ] ) 1297 else : 1298 lines = [ "%s:\n" % preamble ] + lines 1299 return ( ' ' * 11 ) . join ( lines ) 1300 1304 1305 [-] def [get_children] ( node , parent ) : return node . [children] ( ) 1306 [-] def [ignore_cycle] ( node , stack ) : pass 1307 [-] def [do_nothing] ( node , parent ) : pass 1308 1310 """An iterator for walking a Node tree. 1311 1312 This is depth-first, children are visited before the parent. 1313 The Walker object can be initialized with any node, and 1314 returns the next node on the descent with each get_next() call. 1315 'kids_func' is an optional function that will be called to 1316 get the children of a node instead of calling 'children'. 1317 'cycle_func' is an optional function that will be called 1318 when a cycle is detected. 1319 1320 This class does not get caught in node cycles caused, for example, 1321 by C header file include loops. 1322 """ 1323 [-] def [__init__] ( self , node , kids_func = get_children , 1324 cycle_func = ignore_cycle , 1325 eval_func = [do_nothing] ) : 1326 self . kids_func = kids_func 1327 self . cycle_func = cycle_func 1328 self . eval_func = eval_func 1329 node . wkids = [copy] . [copy] ( kids_func ( node , None ) ) 1330 self . stack = [ node ] 1331 self . history = { } # used to efficiently detect and avoid cycles 1332 self . history [ node ] = None 1333 1335 """Return the next node for this walk of the tree. 1336 1337 This function is intentionally iterative, not recursive, 1338 to sidestep any issues of stack size limitations. 1339 """ 1340 1341 while self . stack : 1342 if self . stack [ - 1 ] . wkids : 1343 node = self . stack [ - 1 ] . wkids . pop ( 0 ) 1344 if not self . stack [ - 1 ] . wkids : 1345 self . stack [ - 1 ] . wkids = None 1346 if node in self . history : 1347 self . cycle_func ( node , self . stack ) 1348 else : 1349 node . wkids = [copy] . [copy] ( self . kids_func ( node , self . stack [ - 1 ] ) ) 1350 self . stack . [append] ( node ) 1351 self . history [ node ] = None 1352 else : 1353 node = self . stack . pop ( ) 1354 del self . history [ node ] 1355 if node : 1356 if self . stack : 1357 parent = self . stack [ - 1 ] 1358 else : 1359 parent = None 1360 self . eval_func ( node , parent ) 1361 return node 1362 return None 1363 1366 1367 1368 [arg2nodes_lookups] = [ ] 1369 1370 # Local Variables: 1371 # tab-width:4 1372 # indent-tabs-mode:nil 1373 # End: 1374 # vim: set expandtab tabstop=4 shiftwidth=4: 1375
|
|
|
|
|Generated by Epydoc 3.0.1 on Sun Aug 24 12:14:13 2014||
|

Accept-Ranges: bytes


markdown:
# Xem Phim xem phim sex han quoc
[Xem:](http://www.sharephim.net/vay-hong-tang-2/)1,740 [Xem:](http://www.sharephim.net/bao-chua-caligula-2/)21,768 [Xem:](http://www.sharephim.net/hien-vien-kiem/)3,935 [Xem:](http://www.sharephim.net/phim-sex-cho-dien-thoai-di-dong/)191,576 [Xem:](http://www.sharephim.net/yeu-khong-rang-buoc/)292,301 [Xem:](http://www.sharephim.net/giaitri-sex/)313,443 [Xem:](http://www.sharephim.net/sex-nam/)84,197 [Xem:](http://www.sharephim.net/sec-phim-sec/)102,169 [Xem:](http://www.sharephim.net/phim-x-viet-xem-phim-x-viet-phim-sex/)114,208 [Xem:](http://www.sharephim.net/phim-set-viet/)194,184 [Xem:](http://www.sharephim.net/caveviet-com-phim-caveviet-com-sex-caveviet-com/)112,347 [Xem:](http://www.sharephim.net/phim-sexvnonline-com/)54,097 [Xem:](http://www.sharephim.net/phim-sex-aitinhviet-com/)418,887 [Xem:](http://www.sharephim.net/zin3x/)78,266 [Xem:](http://www.sharephim.net/phim-cap-3/)50,758 [Xem:](http://www.sharephim.net/film-cap-3/)65,020 [Xem:](http://www.sharephim.net/dong-phim-sex/)79,180 [Xem:](http://www.sharephim.net/phim-sex-vn/)451,266 [Xem:](http://www.sharephim.net/phim-sex-hay/)55,870 [Xem:](http://www.sharephim.net/phim-maria-ozawa/)249,161 [Xem:](http://www.sharephim.net/phim-cap-ba-online/)36,864 [Xem:](http://www.sharephim.net/phim-nguoi-lon/)90,527
### xem phim sex han quoc, Xem online xem phim sex han quoc, Xem phim xem phim sex han quoc, Phim xem phim sex han quoc
![ quang cao model and fashion](http://www.sharephim.com/ads/forex.jpg)
![ quang cao model and fashion](http://www.sharephim.com/ads/forex.jpg)
### BẠN ĐÃ XEM CHƯA
[Xem:](http://www.sharephim.net/can-ke-cai-chet/)435 [Xem:](http://www.sharephim.net/xem-phim-tinh-yeu-o-quanh-ta/)1,172 [Xem:](http://www.sharephim.net/chien-lua-tinh-thu/)1,142 [Xem:](http://www.sharephim.net/nhiem-vu-bat-kha-thi-ii/)1,903 [Xem:](http://www.sharephim.net/danh-sach-den/)885 [Xem:](http://www.sharephim.net/bao-thanh-thien-tron-bo/)3,751 [Xem:](http://www.sharephim.net/nguoi-hang-xom-hoan-hao/)2,260

Vary: Accept-Encoding


markdown:
![ SkyDoor Travel](/images/text_logo.png)
![ SkyDoor Travel](/images/text_logo.png)
[Bản đồ](http://www.skydoor.net/#3622) [Khách sạn](http://www.booking.com/city/vn/ninh-binh.html?aid=354545) [Di động](http://info.skydoor.net/huong-dan/tinh-nang/di-dong) [Nhúng SkyDoor](http://info.skydoor.net/huong-dan/tinh-nang/nhung-skydoor) [English](http://en.skydoor.net) *LTS.Trong các cuộc mà khchs đi thăm quan, có những cuộc liên hoan đặc sản địa phương, có những khách quá chén say, bạn nên tham khảo cách giải rượu dưới đây, để cho khách khoẻ để mai tiếp tục hành trình.* **Giấm ăn:** 50g giấm ăn, 25g đường đỏ, 3 lát gừng tươi, đun qua một chút rồi mới cho uống. *** Café:** khi say rượu và rơi vào trạng thái ngủ mê mệt, có thể pha café đặc cho uống, sau một lúc sẽ tỉnh lại. *** Chè đặc:** chè đặc có khả năng giải trừ ngộ độc do cồn. Trong chè còn có chứa một lượng kiềm đáng kể có tác dụng trị liệu với hiện tượng hôn mê và ức chế hô hấp. *** Húp cháo loãng:** Khi gặp cháo loãng, chất cồn trong rượu bị ngưng tụ lại do đó giảm mạnh khả năng hấp thụ cồn trong cơ thể người. *** Lòng trắng trứng gà sống:** chất cồn trong rượu gặp chất protein trong trứng gà sẽ ngưng tụ mà lắng xuống, giải vây cho dạ dày, tránh cho niêm mạc của dạ dày khỏi sự tấn công của cồn. Do đó, khi thấy dấu hiệu say rượu, hãy uống ngay một chút lòng trắng trứng gà sống. *** Nước chè đậu xanh:** 50g đậu xanh rang chín, trộn với 1 nắm chè, cho vào ấm pha với nước sôi. Sau khi cho uống vài phút sẽ giải rượu ngay. *** Nước vỏ long não:** 100g vỏ long não đun với nước cho uống cũng có tác dụng giải rượu. ***Củ cải - đường - giấm:** Củ cải thái sợi nhỏ trộn với đường và giấm, ăn vừa mát, vừa ngon miệng lại có tác dụng giải rượu. Có thể giã nát củ cải vắt lấy nước cốt, cho thêm ít đường đỏ rồi uống. Ngoài ra có thể ăn sống củ cải một lượng thích hợp cũng mang lại hiệu quả giải rượu nhất định.
[Hà nội - Hạ long - Đảo ngọc Tuần Châu - Ninh Binh – Lào Cai - Sapa - Huế - Đà Nẵng - Hội An - Nha Trang - Tp Hồ Chi Minh](/tour/Ha_noi_Ha_long_Dao_ngoc_Tuan_Chau_Ninh_Binh_Lao_Cai_Sapa_Hue/616)


markdown:
Sau khi Báo Thanh Niên thông tin ông Nguyễn Hiền Lương (Giám đốc Công ty TNHH Hiệp Thành, TP.Cà Mau) gửi đơn tố cáo ông Nguyễn Quốc Định, Giám đốc Sở Xây dựng Cà Mau ký quyết định hủy kết quả đấu thầu “mang tính cá nhân” và “dìm” thầu của ông, UBND tỉnh Cà Mau đã có văn bản đề nghị Sở KH-ĐT tỉnh Cà Mau kiểm tra về việc giám sát đánh giá các dự án do Sở Xây dựng làm chủ đầu tư, trong đó có dự án đầu tư xây dựng hạ tầng kỹ thuật Khu quảng trường văn hóa trung tâm tỉnh.
Trao đổi với PV Thanh Niên, một cán bộ Sở KH-ĐT tỉnh Cà Mau nhấn mạnh: “Việc hủy thầu một cách kỳ lạ của Sở Xây dựng đã tạo dư luận xấu trong công tác đấu thầu các dự án do Sở Xây dựng làm chủ đầu tư. Theo chỉ đạo của UBND tỉnh, chúng tôi sẽ tiến hành kiểm tra, giám sát lại công tác đấu thầu này. Nếu phát hiện sai phạm đến đâu, chúng tôi sẽ đề nghị xử lý đến đó”.
Gia Bách
Tin tức Thanh Niên Online
Tin sao iHay
Tin nóng
Tin thể thao
Sài Gòn Ẩm Thực
World Cup 2014
Tổng biên tập: NGUYỄN QUANG THÔNG
Phó tổng biên tập phụ trách Thanh Niên Online: HẢI THÀNH
Phụ trách tòa soạn Thanh Niên Online:
- Ủy viên Ban biên tập - Tổng Thư ký tòa soạn: TRẦN VIỆT HƯNG
- Ủy viên Ban biên tập - Phó tổng Thư ký tòa soạn: ĐÀO HỒNG HẠNH
- Phó tổng Thư ký tòa soạn: ĐỖ HÙNG
- Thư ký tòa soạn: NGUYỄN MINH GIAO - NGUYỄN ĐÌNH HUÂN
NGUYỄN XUÂN TOÀN - NGUYỄN TRẦN DUY
Giấy phép xuất bản số 298/GP - BTTTT cấp ngày 29.7.2013
© 2003-2013 Bản quyền thuộc về Báo Thanh Niên
Cấm sao chép dưới mọi hình thức nếu không có sự chấp thuận bằng văn bản
Hotline: Quảng cáo, PR - 0908 78 0404
Thanh Niên Online chạy tốt nhất trên các trình duyệt
Internet Explorer 8.0 trở lên
Firefox 6.0 trở lên
Chrome 14.0 trở lên

X-MS-InvokeApp: 1; RequireReadOnly

Cache-Control: public, s-maxage=600, max-age=600


markdown: Công ty Thép Hồng Phát chuyên kinh doanh với các sản phẩm kim khí thép hình với phương châm “Để tên tuổi và hình ảnh của mình luôn tồn tại trong trí nhớ khách hàng”,

Vary: Accept-Encoding,User-Agent


markdown:
**3**lượt cảm ơn)
Xin cho hỏi tác dụng của cao hổ cốt ? những ai , tầm tuổi nào , cơ thể ra sao có thể dùng được cao hổ cốt? xin cám ơn
Theo dược học cổ truyền, cao hổ cốt vị mặn, tính ấm, vào được hai kinh can và thận; có công dụng bổ dương, trục phong hàn, trấn thống (giảm đau), làm mạnh gân cốt, trừ thấp; thường được dùng để chữa các chứng tê thấp, đau nhức gân xương, đi lại khó khăn, chân tay co quắp, thoái hóa xương khớp, suy nhược cơ thể...
Có thể nói, cao xương hổ có hai thế mạnh là: bổ dưỡng cơ thể và phòng chống các bệnh lý liên quan đến xương khớp như viêm đa khớp dạng thấp, thoái khớp gối, hư xương sụn cột sống cổ và cột sống thắt lưng, viêm cột sống dính khớp, viêm quanh khớp vai, viêm gân, gãy xương lâu liền, loãng xương...
Nghiên cứu hiện đại cho thấy, trong thành phần hổ cốt có chứa collagen, mỡ, calcium phosphate, calcium carbonat, magiesium phosphat, trong đó collagen là hoạt chất chính; gelatin của hổ cốt chứa 17 amino-acid, lượng acid amin trong xương hổ cao gấp 900 các loại xương động vật khác và có tỷ lệ đạm toàn phần rất cao. Về tác dụng dược lý, hổ cốt có công dụng chống viêm, giảm đau, an thần và làm lành nhanh xương gãy.
Cách phân biệt thật giả
Cao hổ cốt thực nấu với tỷ lệ 5 hổ một sơn dương, nấu đúng kĩ thuật thì có mầu vàng ngà hơi trong, người lành nghề có thể kiểm định được, như người thợ rèn nhìn mầu lửa trong lò có thể biết được nhiệt độ, nhưng khó mà miêu tả cho người khác hiểu được. Còn người dùng thật khó phân biệt thật giả. Người ta có truyền miệng một số cách thử như: nếu là cao hổ thật thì ngọn cỏ tươi cắm trên mặt cao phải héo úa, chó ngửi thấy phải bỏ chạy, hoặc người uống cao sẽ cảm thấy một luồng khí nóng chạy khắp cơ thể hoàn toàn là những chuyện thần thoại hóa cao hổ mà thôi, chúng tôi đã thử nghiệm trên thực tế không xẩy ra những hiện tượng nêu trên. do vậy
Cách dùng:
Ngày dùng 6 - 12g, thái miếng nhỏ ngậm cho tan trước khi đi ngủ, hoặc ngâm rượu 1/4 để uống (ngâm rượu là tốt hơn cả). có thể xem kĩ hơn ở phần sau
Tuổi nào có thể dùng cao hổ cốt :
Nếu dùng để trị bệnh thì không cứ độ tuổi, cốt sao vị thuốc hợp với bệnh tình, nên khi dùng phải có sự chỉ định của thầy thuốc
Dùng để bồi bổ sức khỏe thì đàn ông 8 lần 5 là 40 tuổi , Phụ nữ 7*5= 35 tuổi, thận khí bắt đầu suy, xương cốt không được nuôi dưỡng đầy đủ nên răng khô, xương loãng đi. có thể dùng được
Cám ơn bạn! Bạn có biết 5 con hổ với 1 con sơn dương ra được bao nhiêu cao ko?
Người tôi rất nhiệt , nóng gan có nên dùng cao hổ cốt ko?
One A Day Men's cho sức khỏe nam giới V-TPCN0005
Hồng sâm - Sản phẩm có lợi cho sức khỏe
Hồng sâm - Sức Khoẻ (HSHQ30)
CoQ10 100 mg Trunature®- cho bạn một trái tim khỏe mạnh
|
|![]()
|
|

Server: Apache

Set-Cookie: u_nologin_id=1368464104; expires=Fri, 26-Dec-2014 21:37:38 GMT; path=/; httponly


markdown:
**15**lượt cảm ơn)
Mình đang mang thai tuần thứ 28 ,mình đc bs kê cho uống thuốc sắt ESKA FOLVIT ( SK+F ) của Bangladesh, nay mình muốn thay đổi thuốc sắt có đc ko? hay là mình vẫn phải uống thuốc đang dùng cho tới lúc sinh? thuốc mà mình đang uống có tốt hơn những loại thuốc sắt khác ko ?
Chào bạn
Chị gái mình mang thai cũng đc bác sĩ kê thuốc sắt đó để uống đấy, bạn yên tâm uống theo chỉ định bác sĩ vì đó là chuyên ngành của bác sĩ rồi, chắc chắn là thuốc tốt bạn ạ. Nếu bạn ko yên tâm, muốn đổi thuốc sắt thì cũng nên nhờ 1 bác sĩ khác kê thuốc nhé bạn. Chúc 2 mẹ con bạn luôn khỏe mạnh, bình an.
|Lời cảm ơn||
|3 điểm
|Cảm ơn câu trả lời của
|tuncon.
Miếng dán tránh thai Evra 105883
Màng Film tránh thai - VCF
Durex Select (hộp 3 cái)
Beyond Seven Aloe
|
|![]()
|
|

Set-Cookie: u_nologin_id=1368528672; expires=Fri, 26-Dec-2014 22:31:02 GMT; path=/; httponly


markdown:
Tấm dán màn hình 15inch đến 15.4inch Wide cho Laptop
Loại: Trợ giúp / Giao tiếp: - / Màu sắc: - / Xuất xứ: Trung Quốc /
Đế tản nhiệt cho laptop (loại 3 quạt)
Loại: Phụ kiện / Giao tiếp: USB / Màu sắc: Trong suốt / Xuất xứ: Trung Quốc /
Tản nhiệt cho laptop 2 quạt loại 1
Loại: Phụ kiện / Giao tiếp: USB / Màu sắc: Hồng / Xuất xứ: Trung Quốc /
Đế tản nhiệt cho laptop (loại 2 quạt)
Loại: Phụ kiện / Giao tiếp: USB / Màu sắc: Trong suốt / Xuất xứ: Trung Quốc /

Set-Cookie: u_nologin_id=1368474774; expires=Fri, 26-Dec-2014 21:46:09 GMT; path=/; httponly


markdown:
### Video Categories
### Today's Top 10 Videos
[Thúy Nga Paris By Night 106](/index.html?cid=1&idx=91b6e59838143d2b6ab49da5bfc3e5fd) [Thần Toán Thiên Cơ 01 A](/index.html?cid=7783&idx=759208ecdce1e9b27519aaa0024d537c) [Đắc Kỷ Trụ Vương 01 A](/index.html?cid=7777&idx=ee79be084e0c67812bfc35237df6282e) [Đẻ Mướn 01 A](/index.html?cid=7778&idx=f3c9f368c0ff813185dec995112b75ed) [Miêu Thúy Hoa 01 A](/index.html?cid=7782&idx=64af08e959a70badc8b878da0ab0e360) [Ảo Vọng 01](/index.html?cid=7775&idx=674aab470827258707842fafec88b47e) [Khi Yêu Đừng Nói Lời Chia Tay 32 A](/index.html?cid=6592&idx=8e9faad249ee840b78c09698ae7f3f53) [San Bằng Thiếu Lâm Tự 01 A](/index.html?cid=4579&idx=3f1c9c837bc117114ac50c9564a2c321) [Đẻ Mướn 01 B](/index.html?cid=7778&idx=1a8c8c5ac2a98f9735642a225cf4e2c4) [Võ Lâm Ngũ Bá 09 D](/index.html?cid=1587&idx=2532cc63889c2645b5a6d687ffe801b2)
### Other Websites
[Hát Karaoke Online](http://www.timkaraoke.com/) [Bếp Nhà Ta](http://www.bepnhata.com/) [Góc Đẹp Xinh](http://www.gocdepxinh.com/) [Pháp Âm](http://www.kinhphat.org/) [Video for Asian](http://www.video4asian.com) [Vietnamese Dictionary](http://www.vndic.org) [Báo Đời](http://www.baodoi.com) [Yêu Nhạc Vàng](http://www.yeunhacvang.com) [Indexed Tutorials](http://www.indextutorials.com) [English Lyric Albums](http://www.lyrics5.com) [Hot and Funny Videos](http://www.hotnfunny.com) [Roleplay](http://www.rphut.com)

Server: nginx

Cache-Control: max-age=0, no-cache


markdown:
Keywords:phim bo, phim hong kong, phim han quoc, phim tam ly, phim 18, hai kich, phim hoat hinh, tan co, cai luong, webcam videos
Category:Video, Phim, Hài Kịch, Nấu Ăn, Nhạc Việt Nam, Nhạc Hàn Quốc, Nhạc Vàng, Phim Việt Nam, Phim Trung Quốc, Phim Hồng Kông, Phim Nhật Bản, Phim Hàn Quốc, Phim Đài Loan, Phim Thái Lan, Phim Hành Động, Phim Hoạt Hình, Phim Tâm Lý, Phim Viễn Tưởng, Phim Dã Sử, Phim Kinh Dị - Ma, Phim Hài, Phim Tình Cảm, Phim Võ Thuật, Phim Thần Thoại, Tân Cổ - Cải Lương, Trang Điểm - Làm Đẹp, Việt Karaoke, Webcam Videos, Phim 18+, Hong Kong Drama, Hong Kong Movie, Japanese Drama, Japanese Movie, Chinese Drama, Chinese Movie, Korean Drama, Korean Show, Korean Movie, Hollywood Drama, Taiwan Movie, Taiwan Drama, Phỏng Vấn, Phỏng Vấn Xin Việc, Phim HD, Người Đẹp, Hot Jav, Phim Chiếu Rạp, Anri Sugihara, Saori Hara, Maria Ozawa, Tsubasa Amami, Tsukasa Aoi, Kirara Asuka, Yui Hatano, Aino Kishi, Azumi Mizushima, Rina Rukawa, Ria Sakurai, Hitomi Tanaka, Akie Harada, Rina Aizawa, Yoko Matsugane, Akiho Yoshizawa, Reon Kadena, Mizuki Hoshina, Momoka Nishina, Sayaka Isoyama, Ai Shinozaki
Disclaimer: VideosViet.Com is a video search engine that indexing and organizing videos on the web. Everyday 1,000+ new videos, phim, ca nhac, hai kich, phong su.

Server: cloudflare-nginx


markdown:
|
|
![]()
|
|
## Giao Diện Tiếng Việt cho Win7 (free.....)
Topic có 1 bài trả lời và 5218 lượt xem!
Facebook comment
|Quân House
||House DJ Music - Nhạc House
||25
||17-09-11 06:49 PM
||James Bond
||For Windows
||96
||02-10-10 05:11 AM
||tiennhotony
||For Windows
||0
||03-03-10 02:20 AM
||KING_007
||For Windows
||0
||09-02-10 05:42 AM
|«
»
BÀI MỚI TẠI BOX VIP

Set-Cookie: allastactivity=0; expires=Thu, 17-Sep-2015 21:48:00 GMT; path=/

Pragma: private