понедельник, 13 августа 2012 г.

Removing duplicated web parts after page layouts feature reactivation

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.SharePoint;using Microsoft.SharePoint.WebPartPages;using System.Web.UI.WebControls.WebParts;using System.Xml;using System.Security.Cryptography;using System.IO;namespace RemoveDuplicatedLayoutsWebParts{        class Program        {                static void Main(string[] args)                {                        using (SPSite site = new SPSite(args[0]))                        {                                SPList list = site.GetCatalog(SPListTemplateType.MasterPageCatalog);                                SPListItemCollection items = list.Items;                                // find the right Page Layout                                foreach (SPListItem item in items)                                {                                        List<string> webParts = new List<string>();                                        if (item.File.ServerRelativeUrl.Contains("Cargotec.CMS.PageLayouts") && !item.File.ServerRelativeUrl.EndsWith("txt"))                                        {                                                try                                                {                                                        Console.WriteLine("Proceed: " + item.File.ServerRelativeUrl);                                                        var previousWps = new List<String>();                                                        SPFile file = item.File;                                                        if (file.CheckOutType == SPFile.SPCheckOutType.None) file.CheckOut();                                                        // get the Web Part Manager for the Page Layout                                                        SPLimitedWebPartManager wpm = file.GetLimitedWebPartManager(PersonalizationScope.Shared);                                                        foreach (System.Web.UI.WebControls.WebParts.WebPart wp in wpm.WebParts.Cast<System.Web.UI.WebControls.WebParts.WebPart>().ToList())                                                        {                                                                Console.WriteLine("Checking web part: " + wp.Title);                                                                wp.ExportMode = WebPartExportMode.All;                                                                var xml = GetXml(wp, wpm);                                                                //Console.WriteLine("-------------------------------------------");                                                                //Console.WriteLine(xml);                                                                //Console.WriteLine("-------------------------------------------");                                                                if (previousWps.Contains(xml))                                                                {                                                                        Console.WriteLine("Deleting web part: " + wp.Title);                                                                        wpm.DeleteWebPart(wp);                                                                }                                                                else previousWps.Add(xml);                                                        }                                                        file.CheckIn("removed duplicates");                                                        file.Publish("removed duplicates");                                                }                                                catch (Exception ex)                                                {                                                        Console.WriteLine(ex.Message);                                                }                                        }                                }                        }                        Console.WriteLine("Finished");                        Console.ReadKey();                }                static bool Contains(List<System.Web.UI.WebControls.WebParts.WebPart> wps, System.Web.UI.WebControls.WebParts.WebPart wp, SPLimitedWebPartManager wpm)                {                        foreach (var wpOld in wps)                        {                                if (GetXml(wp, wpm) == GetXml(wpOld, wpm)) return true;                        }                        return false;                }                static string dllLink = " <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>" + System.Environment.NewLine;                static string dllLink2 = "<TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>" + System.Environment.NewLine;                static public string GetXml(System.Web.UI.WebControls.WebParts.WebPart wp, SPLimitedWebPartManager wpm)                {                        using (var sw = new StringWriter()) {                                using (var xw = new XmlTextWriter(sw))                                {                                // Build Xml with xw.                                        wpm.ExportWebPart(wp, xw);                                        xw.Flush();                                }                        return sw.ToString().Replace(dllLink, "").Replace(dllLink2, "");                        }                }        }}

среда, 4 июля 2012 г.

Маленькие заметки.

Привет.

Выдался свободный вечерок, решил порукоблудствовать с клавиатурой.

В последнее время стал много спать. Ложусь в 11 с аудиокнижкой и засыпаю к 12 ти.

Никакого компьютера и недосыпа. Крайне интересные ощущения. Мозг все время чистый как будто пропылесошенный.

На работе много работаю с индусским кодом и это опять подвигло мою жизнь от динамики к статике. Я не представляю, что было бы, если бы все было на питоне. Проект было бы не возможно рефакторить и изменять. А баги ловили исключительно в продакшн. Да и перечитываю Вирта вечерами, так опять пришел ко мнению, что язык должен быть близок к железу, а на нем надо делать предметно ориентированный UI и/или DSL. А большинство языков типо Питона сейчас являются этакими DSL для программирования. Вообще много мыслей по этому поводу, но ракрывать некогда.

После просмотра сессий про GO с Google IO и начав про него думать внезапно осознал, что все это время, в своем доморощенном проекте который изначально был запрототипирован на GO, пытался повторить горутины на питоне с помощью джоб менеджеров, субпроцессов и т.п. Что прикольно, я даже начал писать свой шедулер..И после 2х месяцев мой проект так и застрял и не смог повторить того что на go я написал за 2 недели.

Из интересных языков типа кложа и хаскель, осознал что более их изучать не хочу так как вместо программинга трачу время на изучение, да и лень к томуже.

Написав немного кода на голом С увидел что света в конце тоннеля нет и что хеадер файлы и прочий антиквариат меня загонит в могилу.

Скоро отпуск и думаю переведу весь хоум программинг на GO. Ибо программирование на статике, при помощи интерфейсов без таксономий ооп с простым подходом к конкарренси это все мое.

Вывод: спите больше.

воскресенье, 12 февраля 2012 г.

Сказ про то как Ходжа Нассредин время добывал.

Привет.


Как некоторые знают, в последнее время у меня начались сильные проблемы со временем. В частности, его перестало хватать на написание личных проектов. Тем не менее, продолжая писать код, стал замечать довольно сильные изменения в стиле работы и моем отношении к ней. Итак для примера берем проект, который в данный момент переживает свою 2ю полноценную инкарнацию и наверное 5ю минорную. Суть проекта все таже, изменялись только технологии и в последнее время подход к делу.

Как же происходил процесс работы когда я имел достаточно времени?

Постоянно открыт твиттер(до этого были rss фиды). Как следствие переодически открывались статьи и начиналось все что угодно но только не программирование. Я постоянно жил под влиянием серебрянных пуль, прочитаешь статью и чувствуешь, что отстаешь и надо бежать догонять.Проект как правило начинался с долгого выбора на чем же писать: рельсы рельсы, шпалы, шпалы, джанги, питоны, хаскели, ерланги, го, ноде жс и т.д. и т.п. Составлялись майнд мапы и делался тщательный анализ как правило заключавшийся в том чтобы найти причины, почему я должен использовать очередную серебрянную пулю а ля хаскель. И так по каждому пункту от фреймворков до бд.За этим ачинался процесс работы над проектом. Все шло строго сверху-вниз и выливалось в нехилый оверенжениринг. То мне надо ddd, то dddd, то акторы, то mq, то еще что. Архитектура тщательно обдумывалась, отвергалась и
изменялась. Далее обычно поднимался сервер и настраивался енвайронмент типа для CI и итеративного программирования. Создавался проектана битбакете или ассембле. Выбиралась IDE или очередной крутой текстовый редактор. Наконец мы дошли до разработки. Как правило если проект на c# то создавалась гигантская доменая модель и мильон интерфейсов и т.п. Если же проект на каком-нибудь хаскель или го, nо начиналась ебата по поиску библиотек или написанию своих для инфраструктуры. Тратилось гигантское время на изучение самих текстовых редакторов, языков и т.п. Все это безусловно было полезно с точки зрения образования, но бесполезно с точки зрения достижения целей. В силу того, что все эти действия, описанные выше, съедали кучу времени и на написания кода оставалось черезвычайно мало времени, поэтому сам код писался, через поиск в гугле и копи пастой. Когда, что-то не работало то пытался найти быстрый воркараунд в простонародье именуемый костылем. Каждая проблема сопровождалась легкой депрессией, ведь как правило код писался в свободное от работы время и по сути отнимал отдых. Каждая задержка была серпом по яицам. В конце концов я полностю терял оптимизм и  интерес.

А теперь рассмотрим текущую ситуацию. В данный момент, у меня с трудом набирается 15 минут свободного времени, по вечерам, на программирование. Первое отличие: я вообще перестал читать информацию из интернет посвященную программированию. Никакого пуша, только поиск по конкретным вопросам. Второе: я перестал отвлекаться, так как нет особого смысла садиться программирвоать 15 минут и параллельно что-либо читать. Вместо этого, я или серфю или пишу код. То есть, все стало раздельно, никакого смешения. Cтал прагматичен в выборе тулов и языков. В данном проекте, я думал над выбором 5 минут.
Изначальные требования: интерактивность разработки (устал я от компиляций и т.п.) простота, большой код бейс на интеграцию с сайтами рунета аля мейл ру, вк, платежные системы, наличие библиотек для обработки текста. Учитывались и личные предпочтения. Под эти критерии подошел только питон с джангой. Да да, я все его ругаю, но раз за разом возвращаюсь к нему.

Главное изменение в программировании это разработка снизу вверх. Я теперь стартуя проект, пишу его в IDLE без всяких редакторов и т.п. Начинаю с инфраструктуры, то есть в моем случае работа с различными внешними апи. Я с консоли все пробую, как получилось
пишу простенький АПИ сохраняю в файл, кидаю в дропбокс. Уже на втором этапе, когда я дохожу до сайта, я беру тектовый редактор, git и начинаю уже интеграцию всего этого кода в общую структуру. Раньше я пытался быстро сделать рабочий прототип и ждать когда на меня посыпятся деньги, то теперь я вообще не читаю стартап шит, и меееедлееенно делаю проект который возможно даже не имеет перспектив. Но зато делаю его хорошо и с наслжадением самим процессом создания. Депрессия исчезла.

Можно писать еще долго, но я ограничусь краткой суммой: разрабтка снизу вверх, неторопливость, прагматичность, не

смешивание различных режимов работы.

понедельник, 30 мая 2011 г.

Moss site creation error: Provisioning did not succeed. Failed to create the 'Workflow Tasks' library in CreateApprovalTaskList

Moss site creation error: Provisioning did not succeed. Failed to create the 'Workflow Tasks' library in CreateApprovalTaskList

Solution: check that owstimer service is running and has enought rights.

четверг, 24 марта 2011 г.

Как победить все грабли запуска Django 1.3 на windows 7 x64

1. Ставим python 2.7

2. Запускаем regedit как администратор.

3. Копируем все

из HKEY_LOCAL_MACHINE\SOFTWARE\Python

в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python

4. Удаляем все разделы содержащее кириллические символы в названии из HKEY_CLASSES_ROOT\MIME\Database\Content Type

5. Устанавливаем PIL-1.1.7.win-amd64-py2.7.‌exe отсюда http://www.lfd.uci.edu/~gohlke/pythonlibs/

6/ Устанавливаем джангу.

оргазмируем

вторник, 8 февраля 2011 г.

cryptocipher install fix

cabal install cryptocipher
Resolving dependencies...
Configuring cryptocipher-0.2.3...
Preprocessing library cryptocipher-0.2.3...
Preprocessing executables for cryptocipher-0.2.3...
Building cryptocipher-0.2.3...
[1 of 8] Compiling Number.Serialize ( Number/Serialize.hs, dist/build/Number/Serialize.o )
[2 of 8] Compiling Number.Generate  ( Number/Generate.hs, dist/build/Number/Generate.o )
[3 of 8] Compiling Number.ModArithmetic ( Number/ModArithmetic.hs, dist/build/Number/ModArithmetic.o )
[4 of 8] Compiling Crypto.Cipher.DSA ( Crypto/Cipher/DSA.hs, dist/build/Crypto/Cipher/DSA.o )
[5 of 8] Compiling Crypto.Cipher.RSA ( Crypto/Cipher/RSA.hs, dist/build/Crypto/Cipher/RSA.o )

Crypto/Cipher/RSA.hs:103:35:
    No instance for (Control.Monad.Error.Class.Error Error)
      arising from a use of `>>=' at Crypto/Cipher/RSA.hs:103:35-56
    Possible fix:
      add an instance declaration for
      (Control.Monad.Error.Class.Error Error)
    In the expression: dp pk c >>= unpadPKCS1
    In the definition of `decrypt':
        decrypt pk c
                  | B.length c /= (private_sz pk) = Left MessageSizeIncorrect
                  | otherwise = dp pk c >>= unpadPKCS1
                  where
                      dp = if private_p pk /= 0 && private_q pk /= 0 then
                               dpFast
                           else
                               dpSlow
cabal: Error: some packages failed to install:
cryptocipher-0.2.3 failed during the building phase. The exception was:
ExitFailure 1

FIX: cabal install mtl

Linux.org.ru News

Вебпланета - все новости

CNews - Издание о высоких технологиях