Windows 7: что новенького? Андрей Бирюков select vdisk file=путь_к_VHD_файлу attach vdisk detach vdisk сreate vdisk file="путь к файлу" type=fixed maximum=размер диска select vdisk file="путь к файлу" attach vdisk ----------------------------------------------------------------------------------------------------------------- Основные изменения в WAIK для Windows Server 2008 R2/7 Сергей Яремчук PETools> DISM /Online /Get-Packages DISM.exe {/image: | /online} [dism_options] {servicing_command} [] PETools> imagex /INFO d:\sources\install.wim PETools> DISM /Get-WimInfo /WimFile:d:\sources\install.wim PETools>DISM /Mount-Wim /WimFile:d:\sources\install.wim /index:1 /MountDir:c:\img PETools> DISM /Image:c:\img /Get-Drivers | more PETools> DISM /Image:c:\img /Get-Features | more PETools> DISM /Get-DriverInfo /driver:oem1.inf PETools>DISM /Online /Get-Features | more PETools> DISM /Online /Disable-Feature:InboxGames PETools> DISM /Online /Enable-Feature /FeatureName:IIS-WebServerRole PETools> DISM /Unmount-Wim /MountDir:c:\img /commit > DISM /Online /Apply-Unattend: C:\answerfiles\unattend.xml > ScanState c:\store /o /c /i: app.xml /i: user.xml /nocompress /hardlink c:\Users\* [*] C:\* [*] ----------------------------------------------------------------------------------------------------------------- Автоматическая установка Adobe Creative Suite 3 Иван Коробко Листинг 1. Управление параметрами установки CS3 C:\Program Files\ADOBE CS3 ... Листинг 2. Управление устанавливаемыми компонентами CS3 install ... ----------------------------------------------------------------------------------------------------------------- Делегируем права на перемещение учетных записей пользователей в Active Directory. Часть 2. Реализация основных функций Вадим Андросов Листинг 1. Каркас класса UserMove.Engine ‘методы, доступные пользователям класса Const ADS_RIGHT_DS_DELETE_CHILD = 2 Dim info Set info = CreateObject("ADSystemInfo") Листинг 3. Метод инициализации основного класса надстройки sub initialize() timeZoneOffset = "?" set re = new Regexp re.ignoreCase = True re.global = True delegationClasses = Array(getClassGUID("user"), getClassGUID(COMMAND_CLASS), getClassGUID(DENY_COMMAND_CLASS), getClassGUID(START_MOVE_COMMAND_CLASS)) end sub dim timeZoneOffset, re, delegationClasses Initialize Листинг 4. Определение GUID класса function getClassGUID(className) dim classObj set classObj = getObject("LDAP://schema/" & className) getClassGUID = GUID2Str(classObj.schemaIDGUID) end function Листинг 5. Преобразование Octet String к обычной строке Function GUID2Str(Guid) Dim i, b(16) For i = 1 To 16 b(i - 1) = Right("0" & Hex(Ascb(Midb(Guid, i, 1))), 2) Next GUID2Str = "{" & b(3) & b(2) & b(1) & b(0) & "-" & b(5) & b(4) & "-" & b(7) & b(6) & "-" & b(8) & b(9) & "-" for i = 10 to 15 GUID2Str = GUID2Str & b(i) next GUID2Str = GUID2Str & "}" End Function Листинг 6. Проверка прав управления подразделением function canHeManageOU(ou, user) dim canChange, canMoveChild, i canHeManageOU = true for i = 0 to UBound(delegationClasses) canChange = canDo(ou, user, ADS_RIGHT_DS_WRITE_PROP, delegationClasses(i), true) canMoveChild = canDo(ou, user, ADS_RIGHT_DS_DELETE_CHILD Or ADS_RIGHT_DS_CREATE_CHILD, delegationClasses(i), false) canHeManageOU = canHeManageOU and (canChange And canMoveChild) next end function Листинг 7. Проверка наличия прав управления организационной единицей function canHeManagePath(ouPath, whoPath) dim ou, user set ou = getObject(ouPath) set user = getObject(whoPath) canHeManagePath = canHeManageOU(ou, user) end function Листинг 8. Дополнительные функции проверки прав function canCurrentManagePath(ouPath) dim ou set ou = getObject(ouPath) canCurrentManagePath = canCurrentManageOU(ou) end function function canCurrentManageOU(ou) dim user set user = getObject("LDAP://" & info.userName) canCurrentManageOU = canHeManageOU(ou, user) end function function canDo(oper, targetClass, isInherited) canDo = false Dim sec, acl, ace Set sec = ou.Get("ntSecurityDescriptor") Set acl = sec.DiscretionaryAcl dim result For Each ace In acl result = checkACE(ace, oper, targetClass, isInherited) if result <> CHECK_ACE_SKIP then canDo = (result = CHECK_ACE_YES) exit function end if Next end function function checkACE(ace, oper, targetClass, isInherited) checkACE = CHECK_ACE_SKIP if not isTrusteeInteresting(ace.Trustee) then exit function dim classGUID if isInherited then classGUID = ace.InheritedObjectType else classGUID = ace.ObjectType end if if isMask(ace.accessMask, oper) then if ace.AceType = ADS_ACETYPE_ACCESS_DENIED then checkACE = CHECK_ACE_NO exit function end if if ace.AceType = _ ADS_ACETYPE_ACCESS_ALLOWED then checkACE = CHECK_ACE_YES exit function end if if classGUID = targetClass then if ace.AceType = _ ADS_ACETYPE_ACCESS_DENIED_OBJECT then checkACE = CHECK_ACE_NO exit function end if if ace.AceType = _ ADS_ACETYPE_ACCESS_ALLOWED_OBJECT then checkACE = CHECK_ACE_YES exit function end if end if end if end function function isMask(mask, flag) isMask = (mask and flag) <> 0 end function function isTrusteeInteresting(trustee) isTrusteeInteresting = false if trustee = (info.domainShortName & "\" & user.samAccountName) then isTrusteeInteresting = true exit function end if dim trusteeObj if instr(1, Trustee, info.domainShortName) <> 1 then exit function set trusteeObj = getObject("WinNT://" & replace(trustee, "\", "/")) if trusteeObj.class = "Group" then if trusteeObj.isMember("WinNT://" & info.domainShortName & "/" & user.samAccountName) then isTrusteeInteresting = true exit function end if end if end function ----------------------------------------------------------------------------------------------------------------- Синхронизируем данные между компьютерами с помощью сервисов сетевого хранения Виталий Банковский encfs ~/.Dropbox/Private ~/Dropbox.Open mv ~/.licq ~/Dropbox.Open/ ln -s ~/Dropbox.Open/.licq ~/.licq ./configure make make installing tar -xzvf coda-x.x.x.tar.gz cd coda-x.x.x ./configure make make install venus-setup servername.domain.com clog username ----------------------------------------------------------------------------------------------------------------- PowerShell. Определяем имя текущего домена Иван Коробко Листинг 1. Определение RDN-имени домена (VBScript) Set obj = GetObject("LDAP://rootDSE") domain = obj.Get("defaultNamingContext") MsgBox domain Листинг 2. Определение RDN-имени домена (VB.NET) Imports System.DirectoryServices ... Dim obj As New DirectoryEntry("LDAP://RootDSE") Dim domain As String = obj.Properties("defaultNamingContext").Value MsgBox (domain) Листинг 3. Определение RDN-имени домена (VB.NET) $obj=[ADSI]"LDAP://RootDSE" $domain=$obj.defaultNamingContext $domain ----------------------------------------------------------------------------------------------------------------- PowerShell. Поиск объектов в каталоге Active Directory Иван Коробко Листинг 1. Поиск объектов по заданным критериям (VB.NET) Dim obj As New DirectorySearcher("LDAP://RootDSE") obj.SearchScope = SearchScope.Subtree obj.Filter = "(&(objectClass=person)(name=a*)(!objectClass=computer))" obj.Sort.PropertyName = "cn" obj.Sort.Direction = SortDirection.Ascending For Each element As SearchResult In obj.FindAll() Dim obj2 As DirectoryEntry = element.GetDirectoryEntry() msgbox obj2.Properties("cn").Value) Next Листинг 2. Поиск объектов по заданным критериям (PowerShell) $obj = new-object DirectoryServices.DirectorySearcher("LDAP://RootDSE") $obj.SearchScope = "Subtree" $obj.Filter = "(&(objectClass=person)(name=a*)(!objectClass=computer))" $obj.Sort.PropertyName = "cn" $obj.Sort.Direction = "Ascending" $obj.FindAll() | %{ $obj2=$_.GetDirectoryEntry() $obj2.cn ----------------------------------------------------------------------------------------------------------------- Оборудование Cisco для «самых маленьких» Сергей Крутилин Router>show ? Router>show ip ? Router#sh conf | include interface Router#conf t Router(config)#int et 0 Router(config-if)#ip address 192.168.5.3 255.255.255.0 Router#wr mem Router#copy tftp: startup-config Router#copy tftp: running-config Address or name of remote host []?192.168.5.1 Source filename []?cisco871-strat-config C:\>telnet 192.168.5.3 Router#conf t Router(config)#line vty 0 4 Router(config?line)#login Router(config?line)#password samag C:\>telnet 192.168.5.3 Router#conf t Router(config)#enable secret samagsecret Router(config)#username user secret samaguser Router(config)#^Z Router#wr mem C:\>telnet 192.168.5.3 Router#conf t Router(config)#ip nat pool Internet 1.2.3.4 1.2.3.4 netmask 255.255.255.248 Router#conf t Router(config)#ip nat pool Internet 1.2.3.4 1.2.3.6 netmask 255.255.255.248 Router(config)#ip access-list 10 permit 192.168.5.0 0.0.0.255 Router(config)#ip nat insi\de source list 10 pool Internet overload Router(config)#int et 0 Router(config-if)#in nat inside Router(config-if)#int et 1 Router(config-if)#in nat outside Router(config)#ip route 0.0.0.0 0.0.0.0 et 1 (ip route 0.0.0.0 0.0.0.0 Ethernet 1) Router(config)#ip route 0.0.0.0 0.0.0.0 внешний_IP-адрес_шлюза_провайдера (ip route 0.0.0.0 0.0.0.0 a.b.c.d) Router(config-if)#^Z Router#wr mem Router(config)#ip access-list 10 permit 192.168.5.0 0.0.0.255 Router(config)#ip access-list 101 permit tcp host a.b.c.d host w.x.y.z Router(config)#ip access-list 101 permit tcp host w.x.y.z host a.b.c.d Router(config)# no ip access-list 101 permit tcp host a.b.c.d host w.x.y.z Router(config)# ip access-list extended SamagACL Router(config-ext-nacl)# permit tcp host a.b.c.d host w.x.y.z Router(config-ext-nacl)# no permit tcp host a.b.c.d host w.x.y.z Router(config)#access-list 111 permit tcp any any eq 80 Router(config)#access-list 111 permit tcp any any eq WWW Router(config)#access-list 111 permit tcp any any eq ? Router(config)#ip nat inside source static tcp 192.168.5.2 25 a.b.c.d 25 extendable Router(config)# ip dhcp pool Office Router(config-dhcp)# network 192.168.5.0 255.255.255.0 Router(config-dhcp)# domain-name samag.ru Router(config-dhcp)#default-router 192.168.5.3 Router(config-dhcp)# dns-server 192.168.5.2 Router(config-dhcp)#lease 7 Router(config)# ip dhcp excluded-address 192.168.5.3 192.168.5.4 Router(config)#^Z Router#wr mem ----------------------------------------------------------------------------------------------------------------- Почтовый клиент Alpine Игорь Штомпель dpkg -i alpine_2.00_i386.deb dpkg -r alpine alpine ----------------------------------------------------------------------------------------------------------------- JavaFX – Reach Internet Application от Sun. Прощай, унылый Swing? Кирилл Сухов C:\Sun>javafxc import javafx.stage.*; import javafx.scene.*; import javafx.scene.text.*; import javafx.scene.paint.*; import javafx.scene.effect.*; Stage { title: "Hello FX" width: 250 height: 80 scene: Scene { content: Text { x: 10 y: 30 font: Font { size: 24 } fill: Color.GREEN effect: DropShadow{ offsetX: 3 offsetY: 3} content: "Hello FX!" } } } C:\Sun>javafxc testfx.fx C:\Sun>javafx testfx import javafx.stage.*; import javafx.scene.*; import javafx.scene.text.*; import javafx.scene.paint.*; import javafx.scene.effect.*; import javafx.scene.shape.*; Stage { title: "JavaFX-калькулятор" width: 300 height: 500 scene: Scene { content:[ Text { x: 20 y: 60 font: Font { size: 36} fill: Color.GREEN effect: DropShadow{ offsetX: 3 offsetY: 6} content: "2 * 2 = 4" } ] } } Rectangle { fill: Color.SILVER x: 10 y: 80 width:60 height: 40 arcWidth: 20 arcHeight: 20 } Text { x: 35 y: 110 font: Font { size: 24} fill: Color.GREEN content: "1" } class CalcBatton{ var cx: Number; var cy: Number ; var ctext: String; var group= Group{ content: [ Rectangle { fill: Color.SILVER x: cx y: cy width:60 height: 40 arcWidth: 20 arcHeight: 20 cursor: HAND effect: DropShadow{ offsetX: 3 offsetY: 6} }, Text { x: cx + 25 y: cy + 30 font: Font { size: 24} fill: Color.GREEN content: ctext }]} } def bt1=CalcBatton{ cx: 10, cy: 80,ctext: "1"} def bt2=CalcBatton{ cx: 80, cy: 80,ctext: "2"} def bt3=CalcBatton{ cx: 150, cy: 80,ctext: "3"} ... def bt9=CalcBatton{ cx: 10, cy: 180,ctext: "9"} def bt0=CalcBatton{ cx: 80, cy: 180,ctext: "0"} def bt_add=CalcBatton{ cx: 150, cy: 180,ctext: "+"} def bt_sub= CalcBatton{ cx: 220, cy: 180,ctext: "-"} def bt_mul=CalcBatton{ cx: 10, cy: 230,ctext: "*"} def bt_div=CalcBatton{ cx: 80, cy: 230,ctext: "/"} def bt_res=CalcBatton{ cx: 150, cy: 230,ctext: "="} def bt_del=CalcBatton{ cx: 220, cy: 230,ctext: "C"} var buttons=[bt1.group,bt2.group,bt3.group, bt4.group,bt5.group,bt6.group, bt7.group,bt8.group,bt9.group, bt0.group,bt_add.group,bt_sub.group, bt_mul.group,bt_div.group,bt_res.group, bt_del.group]; Stage { ... scene: Scene { content:[ Text { ... },buttons ]} } var cont=""; class CalcBatton{ …................................... effect: DropShadow{ offsetX: 3 offsetY: 6} content: bind cont } effect: DropShadow{ offsetX: 3 offsetY: 6} onMouseClicked: function(evt: MouseEvent):Void { but="{but}{ctext}"; if({ctext}=="C"){ but=""; } } } var gradx= 3; var grady= 6; var group= Group{ cursor: HAND effect: DropShadow{ offsetX: bind gradx offsetY: bind grady} onMousePressed: function(evt: MouseEvent):Void { gradx=0; grady=0; } onMouseReleased: function(evt: MouseEvent):Void { gradx=3; grady=6; } }, import javafx.stage.*; import javafx.scene.*; import javafx.scene.text.*; import javafx.scene.paint.*; import javafx.scene.effect.*; import javafx.scene.paint.Color; import javafx.scene.shape.*; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.Cursor.*; import javafx.scene.Node.*; import javafx.scene.input.MouseEvent; class Calc{ // здесь «вычислительная» часть } def cl= Calc{}; def fil_bt=LinearGradient { startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0, proportional: true stops: [ Stop {offset: 0.0 color: Color.WHITE}, Stop {offset: 1.0 color: Color.SILVER} ] } var cont=""; var sum=0; class CalcBatton{ var cx: Number ; var cy: Number ; var ctext: String; var gradx= 3; var grady= 6; var group= Group{ content: [ Rectangle { fill: fil_bt x: cx y: cy width:60 height: 40 arcWidth: 20 arcHeight: 20 cursor: HAND effect: DropShadow{ offsetX: bind gradx offsetY: bind grady} onMouseClicked: function(evt: MouseEvent):Void { if({ctext}=="C"){ but=""; } else{ but="{cont}{ctext}"; } } onMousePressed: function(evt: MouseEvent):Void { gradx=0; grady=0; } onMouseReleased: function(evt: MouseEvent):Void { gradx=3; grady=6; } }, Text { x: cx + 25 y: cy + 30 font: Font { size: 24} fill: Color.GREEN content: ctext }]} } def bt1=CalcBatton{ cx: 10, cy: 80,ctext: "1"} def bt2=CalcBatton{ cx: 80, cy: 80,ctext: "2"} def bt3=CalcBatton{ cx: 150, cy: 80,ctext: "3"} def bt4=CalcBatton{ cx: 220, cy: 80,ctext: "4"} def bt5=CalcBatton{ cx: 10, cy: 130,ctext: "5"} def bt6=CalcBatton{ cx: 80, cy: 130,ctext: "6"} def bt7=CalcBatton{ cx: 150, cy: 130,ctext: "7"} def bt8=CalcBatton{ cx: 220, cy: 130,ctext: "8"} def bt9=CalcBatton{ cx: 10, cy: 180,ctext: "9"} def bt0=CalcBatton{ cx: 80, cy: 180,ctext: "0"} def bt_add=CalcBatton{ cx: 150, cy: 180,ctext: "+"} def bt_sub=CalcBatton{ cx: 220, cy: 180,ctext: "-"} def bt_mul=CalcBatton{ cx: 10, cy: 230,ctext: "*"} def bt_div=CalcBatton{ cx: 80, cy: 230,ctext: "/"} def bt_res=CalcBatton{ cx: 150, cy: 230,ctext: "="} def bt_del=CalcBatton{ cx: 220, cy: 230,ctext: "C"} var buttons=[bt1.group,bt2.group,bt3.group, bt4.group,bt5.group,bt6.group, bt7.group,bt8.group,bt9.group, bt0.group,bt_add.group,bt_sub.group, bt_mul.group,bt_div.group,bt_res.group, bt_del.group]; Stage { title: "FX Калькулятор" width: 300 height: 500 scene: Scene { content:[ Text { x: 20 y: 60 font: Font { size: 36} fill: Color.GREEN effect: DropShadow{ offsetX: 3 offsetY: 6} content: bind cont },buttons ] fill: LinearGradient { startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0, proportional: true stops: [ Stop {offset: 0.0 color: Color.WHITE}, Stop {offset: 1.0 color: Color.LIGHTGREEN} ] } } } Stage { title: "My Media Player" scene: Scene{ content: MediaComponent { mediaSourceURL: mediaUrl volume: 0.5 visible:true mediaPlayerAutoPlay: true } } } var total; var title; def parser = PullParser { documentType: PullParser.XML; input: anInputStreamThatContainsXML; onEvent: function(event: Event) { if (event.type == PullParser.START_ELEMENT) { if (event.qname.name == "ResultSet" and event.level == 0) { total = event.getAttributeValue(QName{name:"totalResultsAvailable"}); } } else if (event.type == PullParser.END_ELEMENT) { if (event.qname.name == "Title" and event.level == 2) { title = event.text; } } } } parser.parse(); parser.input.close(); println("results: {total}, title: {title}"); var name; var age; name="John"; age=35 function addTwo(a:Number):Number{ return a+2; } println(addTwo(4)); var name='john'; println(«Hello {name}!»); var colors: String[] = ["Green","Red","Gray"]; insert "Black" into colors; insert "Blue" after colors[1]; // теперь последовательность такая: // ["Green","Red","Blue","Gray", // "Black"]; delete "Gray" from colors; delete colors[2]; // теперь: // ["Green","Red",Black"]; var nums = [1..100]; class myObject{ var name: String; var city: String; var myRectangle: Rectangle; function print_name() { println("Name: {name}"); } def myObj = myObject { name: "Vasya"; city: "Moscow"; number:5; } def myRectangle = Rectangle { fill: Color.GREEN width:60 height: 40 } def myObj=myObject { name: "Vasya"; city: "Moscow"; number: "95050"; myRectangle: Rectangle { fill: Color.GREEN width:60 height: 40 } } println( myObj.myRectangle.x); println( myObj.=print_name()); var side= 15; Scene { content: [ SwingSlider { minimum: 0 maximum: 50 value: side radius with inverse vertical: false }, Rectangle { fill: Color.GREEN width: bind side height: bund side*2 } ] } var User = "Misha" on replace oldValue { println("Пользователь изменился"); println("был: {oldValue}"); println("стал: {User}"); }; ----------------------------------------------------------------------------------------------------------------- Приёмы минификации в веб-приложениях Антон Гришан Пример: табличная вёрстка vs DIV-ная вёрстка
Шапка сайта, логотип
Левая колонка Центральная колонка Правая колонка
Пример: табличная вёрстка vs DIV-ная вёрстка
Левая колонка
Центральная колонка
Правая колонка
Example: simple html compressor

Hello World!!!

HTML document here Example: simple html compressor

Hello World!!!

HTML document here