Как я могу развернуть артефакты от сборки Знатока до Системы Выпуска Файла SourceForge?

Вы можете использовать конструктор DataFrame с lists, созданный путем преобразования в numpy array с помощью values с tolist :

import pandas as pd

d1 = {'teams': [['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],
                ['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG']]}
df2 = pd.DataFrame(d1)
print (df2)
       teams
0  [SF, NYG]
1  [SF, NYG]
2  [SF, NYG]
3  [SF, NYG]
4  [SF, NYG]
5  [SF, NYG]
6  [SF, NYG]

df2[['team1','team2']] = pd.DataFrame(df2.teams.values.tolist(), index= df2.index)
print (df2)
       teams team1 team2
0  [SF, NYG]    SF   NYG
1  [SF, NYG]    SF   NYG
2  [SF, NYG]    SF   NYG
3  [SF, NYG]    SF   NYG
4  [SF, NYG]    SF   NYG
5  [SF, NYG]    SF   NYG
6  [SF, NYG]    SF   NYG

И для нового DataFrame:

df3 = pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2'])
print (df3)
  team1 team2
0    SF   NYG
1    SF   NYG
2    SF   NYG
3    SF   NYG
4    SF   NYG
5    SF   NYG
6    SF   NYG

Решение с apply(pd.Series) очень медленно:

#7k rows
df2 = pd.concat([df2]*1000).reset_index(drop=True)

In [89]: %timeit df2['teams'].apply(pd.Series)
1 loop, best of 3: 1.15 s per loop

In [90]: %timeit pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2'])
1000 loops, best of 3: 820 µs per loop

11
задан Brian Matthews 19 August 2008 в 16:11
поделиться

7 ответов

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

Вы можете развернуть на SourceForge, используя SCP , и плагин maven-deploy-plugin можно настроить на использование SCP , поэтому он должен работать. Вы также можете развернуть свой сайт на SourceForge через SCP.

Вы должны сконфигурировать сервер SourceForge в вашем settings.xml для использования «комбинированного» имени пользователя с разделителем запятыми. С этими учетными данными:

SourceForge username: foo
SourceForge user password: secret
SourceForge project name: bar
Path: /home/frs/project/P/PR/PROJECT_UNIX_NAME/ 
    - Substitute your project UNIX name data for /P/PR/PROJECT_UNIX_NAME 

Серверный элемент будет выглядеть так:

<server>
  <id>sourceforge</id>
  <username>foo,bar</username>
  <password>secret</password>
</server>

А раздел distributionManagement в вашем POM будет выглядеть так:

<!-- Enabling the use of FTP -->
<distributionManagement>
  <repository>
    <id>ssh-repository</id>
    <url>
scpexe://frs.sourceforge.net:/home/frs/project/P/PR/PROJECT_UNIX_NAME</url>
  </repository>
</distributionManagement>

Наконец, объявите, что должен использоваться ssh-external:

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
       <artifactId>wagon-ssh-external</artifactId>
       <version>1.0-alpha-5</version>
    </extension>
  </extensions>
</build>

Если это не так не работает, вы можете использовать рекомендуемый подход из ссылки на сайт выше, т.е. создать оболочку на shell.sourceforge. net с вашим именем пользователя и группой проекта:

ssh -t <username>,<project name>@shell.sf.net create

Затем используйте shell.sourceforge.net (вместо web.sourceforge.net) в URL-адресе вашего сайта в разделе diestributionManagement:

<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
9
ответ дан 3 December 2019 в 06:49
поделиться

Знаток плагин SourceForge не работает со Знатоком 2. Также я полагаю, что этот плагин использует FTP, который больше не поддерживается.

0
ответ дан 3 December 2019 в 06:49
поделиться

Похоже, что я оказываюсь перед необходимостью писать это сам.

https://sourceforge.net/projects/wagon-sf/

2
ответ дан 3 December 2019 в 06:49
поделиться

Я нашел, что CruiseControl может загрузить выпуски на SFEE и также работает со Знатоком и Maven2

0
ответ дан 3 December 2019 в 06:49
поделиться
public bool EqualsDefaultValue<T>(T value)
{
    return EqualityComparer<T>.Default.Equals(value, default(T));
}
-121--3210691-

Мне понравился ответ Клайма, поэтому я написал это очень быстро. Я не утверждаю идеальной правоты, но это выглядит довольно хорошо для меня. (то есть единственным испытанием является образец основной ниже)

Это универсальный ленивый инициализатор. Пространство для объекта выделяется один раз, и объект начинается с нуля. Затем можно создать , перезаписав предыдущие объекты без новых выделений памяти.

Реализует все необходимые конструкторы, деструктор, копирование/присвоение, своп, ядда-ядда. Вот вам:

#include <cassert>
#include <new>

template <typename T>
class lazy_object
{
public:
    // types
    typedef T value_type;
    typedef const T const_value_type;
    typedef value_type& reference;
    typedef const_value_type& const_reference;
    typedef value_type* pointer;
    typedef const_value_type* const_pointer;

    // creation
    lazy_object(void) :
    mObject(0),
    mBuffer(::operator new(sizeof(T)))
    {
    }

    lazy_object(const lazy_object& pRhs) :
    mObject(0),
    mBuffer(::operator new(sizeof(T)))
    {
        if (pRhs.exists())
        {
            mObject = new (buffer()) T(pRhs.get());
        }
    }

    lazy_object& operator=(lazy_object pRhs)
    {
        pRhs.swap(*this);

        return *this;
    }

    ~lazy_object(void)
    {
        destroy();
        ::operator delete(mBuffer);
    }

    // need to make multiple versions of this.
    // variadic templates/Boost.PreProccesor
    // would help immensely. For now, I give
    // two, but it's easy to make more.
    void create(void)
    {
        destroy();
        mObject = new (buffer()) T();
    }

    template <typename A1>
    void create(const A1 pA1)
    {
        destroy();
        mObject = new (buffer()) T(pA1);
    }

    void destroy(void)
    {
        if (exists())
        {
            mObject->~T();
            mObject = 0;
        }
    }

    void swap(lazy_object& pRhs)
    {
        std::swap(mObject, pRhs.mObject);
        std::swap(mBuffer, pRhs.mBuffer);
    }

    // access
    reference get(void)
    {
        return *get_ptr();
    }

    const_reference get(void) const
    {
        return *get_ptr();
    }

    pointer get_ptr(void)
    {
        assert(exists());
        return mObject;
    }

    const_pointer get_ptr(void) const
    {
        assert(exists());
        return mObject;
    }

    void* buffer(void)
    {
        return mBuffer;
    }

    // query
    const bool exists(void) const
    {
        return mObject != 0;
    }

private:
    // members
    pointer mObject;
    void* mBuffer;
};

// explicit swaps for generality
template <typename T>
void swap(lazy_object<T>& pLhs, lazy_object<T>& pRhs)
{
    pLhs.swap(pRhs);
}

// if the above code is in a namespace, don't put this in it!
// specializations in global namespace std are allowed.
namespace std
{
    template <typename T>
    void swap(lazy_object<T>& pLhs, lazy_object<T>& pRhs)
    {
        pLhs.swap(pRhs);
    }
}

// test use
#include <iostream>

int main(void)
{
    // basic usage
    lazy_object<int> i;
    i.create();
    i.get() = 5;

    std::cout << i.get() << std::endl;

    // asserts (not created yet)
    lazy_object<double> d;
    std::cout << d.get() << std::endl;
}

В вашем случае, просто создайте члена в вашем классе: leny _ object < B > и вы закончили. Нет ручных выпусков или создания конструкторов копий, деструкторов и т.д. Все берется в вашем хорошем, маленьком повторно используемом классе.:)

EDIT

Устранена потребность в векторе, должен сэкономить немного места, а что-нет.

EDIT 2

Для использования стека вместо кучи используется aligned _ storage и alignment _ of . Я использовал boost , но эта функциональность существует как в TR1, так и в C++ 0x. Мы теряем возможность копирования, а значит, и обмена.

#include <boost/type_traits/aligned_storage.hpp>
#include <cassert>
#include <new>

template <typename T>
class lazy_object_stack
{
public:
    // types
    typedef T value_type;
    typedef const T const_value_type;
    typedef value_type& reference;
    typedef const_value_type& const_reference;
    typedef value_type* pointer;
    typedef const_value_type* const_pointer;

    // creation
    lazy_object_stack(void) :
    mObject(0)
    {
    }

    ~lazy_object_stack(void)
    {
        destroy();
    }

    // need to make multiple versions of this.
    // variadic templates/Boost.PreProccesor
    // would help immensely. For now, I give
    // two, but it's easy to make more.
    void create(void)
    {
        destroy();
        mObject = new (buffer()) T();
    }

    template <typename A1>
    void create(const A1 pA1)
    {
        destroy();
        mObject = new (buffer()) T(pA1);
    }

    void destroy(void)
    {
        if (exists())
        {
            mObject->~T();
            mObject = 0;
        }
    }

    // access
    reference get(void)
    {
        return *get_ptr();
    }

    const_reference get(void) const
    {
        return *get_ptr();
    }

    pointer get_ptr(void)
    {
        assert(exists());
        return mObject;
    }

    const_pointer get_ptr(void) const
    {
        assert(exists());
        return mObject;
    }

    void* buffer(void)
    {
        return mBuffer.address();
    }

    // query
    const bool exists(void) const
    {
        return mObject != 0;
    }

private:
    // types
    typedef boost::aligned_storage<sizeof(T),
                boost::alignment_of<T>::value> storage_type;

    // members
    pointer mObject;
    storage_type mBuffer;

    // non-copyable
    lazy_object_stack(const lazy_object_stack& pRhs);
    lazy_object_stack& operator=(lazy_object_stack pRhs);
};

// test use
#include <iostream>

int main(void)
{
    // basic usage
    lazy_object_stack<int> i;
    i.create();
    i.get() = 5;

    std::cout << i.get() << std::endl;

    // asserts (not created yet)
    lazy_object_stack<double> d;
    std::cout << d.get() << std::endl;
}

И вот мы идем.

-121--2666421-

Попробовав это несколько раз, я наконец получил его для работы - с sftp , а не scp. Это должно работать от unix box (или Mac) - я не уверен насчет клиентов sftp для Windoze. Я использую mvn версии 2.2.0 и не думаю, что у меня установлены специальные плагины. При этом различные пакеты mvn развертываются в разделе Files страницы проекта.

Для работы с настройками необходимо изменить следующее:

  • пользователь -- замените на имя пользователя источника
  • -- замените на пароль
  • ormlite -- замените на имя проекта
  • /o/или/-- замените на первый символ и первые 2 символа имени проекта

В моем файле $ HOME/.m2/settings.xml для сервера SF имеются следующие данные:

<server>
  <id>sourceforge</id>
  <password>secret</password>
  <filePermissions>775</filePermissions>
  <directoryPermissions>775</directoryPermissions>
</server>

Я не указываю имя пользователя в файле settings.xml, так как это должно быть имя пользователя, проект, и я хочу развернуть несколько пакетов в SF. Затем в моем файле pom.xml для пакета ormlite имеется следующее:

<distributionManagement>
 <repository>
  <id>sourceforge</id>
  <name>SourceForge</name>
  <url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/releases
  </url>
 </repository>
 <snapshotRepository>
  <id>sourceforge</id>
  <name>SourceForge</name>
  <url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/snapshots
  </url>
 </snapshotRepository>
</distributionManagement>

Очевидно, что суффиксы каталогов/releases и/snapshots могут быть изменены в зависимости от иерархии файлов.

1
ответ дан 3 December 2019 в 06:49
поделиться

Где timp = user и webmacro = project

URL-адрес scp не работает:

scp://timp,webmacro@shell.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2/

URL-адрес sftp работает:

 sftp://timp,webmacro@web.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2

или для артефактов выпуска проекта :

sftp://timp,webmacro@web.sourceforge.net:/home/frs/project/w/we/webmacro/releases

scp будет работать с shell.sourceforge.net, но вы должны создать оболочку перед использованием с

ssh -t timp,webmacro@shell.sourceforge.net create
1
ответ дан 3 December 2019 в 06:49
поделиться

Я загрузил пример на sourceforge.net по адресу: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/

Вы можете проверить его через svn - так вы сможете увидеть, как использовать плагины для загрузки и выгрузки в область файловой системы sourceforge.net и на веб-сайт.

Основные моменты для загрузки - использование sftp:

Добавьте этот похожий код в ваш pom.xml

<distributionManagement>
                <!-- use the following if you're not using a snapshot version. -->
                <repository>
                    <id>sourceforge-sf-mvn-plugins</id>
                    <name>FRS Area</name>
                    <uniqueVersion>false</uniqueVersion>
                    <url>sftp://web.sourceforge.net/home/frs/project/s/sf/sf-mvn-plugins/m2-repo</url>
                </repository>
                <site>
                    <id>sourceforge-sf-mvn-plugins</id>
                    <name>Web Area</name>
                    <url>
                        sftp://web.sourceforge.net/home/groups/s/sf/sf-mvn-plugins/htdocs/${artifactId}
                    </url>
                </site>
</distributionManagement>

Добавьте похожий код в settings.xml

   <server>
      <id>sourceforge-sf-mvn-plugins-svn</id>
      <username>tmichel,sf-mvn-plugins</username>
      <password>secret</password>
    </server>

    <server>
      <id>sourceforge-sf-mvn-plugins</id>
      <username>user,project</username>
      <password>secret</password>
    </server>

Основные моменты для загрузки - использование maven-плагина wagon-http-sourceforge - смотрите по адресу: sf-mvn-plugins. sourceforge.net/wagon-http-sourceforge/FAQ.html

Пожалуйста, добавьте следующий код в ваш pom.xml

    <repositories>
        <repository>
            <id>sourceforge-svn</id>
            <name>SF Maven Plugin SVN Repository</name>
            <url>http://sf-mvn-plugins.svn.sourceforge.net/svnroot/sf-mvn-plugins/_m2-repo/trunk</url>
        </repository>
    </repositories>


    <pluginRepositories>
        <pluginRepository>
            <id>sourceforge-frs</id>
            <name>SF Maven Plugin Repository</name>
            <url>http://sourceforge.net/projects/sf-mvn-plugins/files/m2-repo</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
    <extensions>
        <extension>
            <groupId>net.sf.maven.plugins</groupId>
            <artifactId>wagon-http-sourceforge</artifactId>
            <version>0.4</version>
        </extension>
    </extensions>
   :
   </build>
3
ответ дан 3 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: