text:
require 'pg'
require 'redis'
require 'yaml'
require 'optparse'
require 'json'
require 'tsort'

require_relative 'config'
require_relative 'utils'

module CartoDB
  module DataMover
    class DumpJob
      include CartoDB::DataMover::Utils
      def dump_db
        # find database host for user
        run_command("pg_dump #{conn_string(
          CartoDB::DataMover::Config[:dbuser],
          @database_host,
          CartoDB::DataMover::Config[:user_dbport],
          @database_name,
        )} -Fc -f #{@filename} --serializable-deferrable -v")
      end

      def initialize(database_host, database_name, path, filename, database_schema = nil)
        @database_host = database_host
        @database_name = database_name
        @filename = filename
        @database_schema = database_schema
        @path = path

        if database_schema == nil
          dump_db
        else
          dump_schema
        end
      end

      def dump_schema
        run_command("pg_dump #{conn_string(
          CartoDB::DataMover::Config[:dbuser],
          @database_host,
          CartoDB::DataMover::Config[:user_dbport],
          @database_name,
        )} -f #{@path}#{@database_schema}.schema.sql -n #{@database_schema} --verbose --no-tablespaces -Z 0")
      end

    end
  end
end

module CartoDB
  module DataMover
    class TsortableHash < Hash
      include TSort
      alias tsort_each_node each_key
      def tsort_each_child(node, &block)
        fetch(node).each(&block)
      end
    end
    class ExportJob
      TABLE_NULL_EXCEPTIONS = ['table_quota'] # those won't be discarded if set to NULL
      include CartoDB::DataMover::Utils

      def get_user_metadata(user_id)
        q = pg_conn.exec("SELECT * FROM users WHERE username = '#{user_id}'")
        if q.count > 0
          user_data = q[0]
        else
          throw "Can't find user #{@user_id}"
        end
        user_data
      end

      def get_org_metadata(organization_id)
        q = pg_conn.exec("SELECT * FROM organizations WHERE name = '#{organization_id}'")
        if q.count > 0
          org_data = q[0]
        else
          throw "Can't find organization #{@organization_id}"
        end

        org_data
      end

      def get_org_users(organization_id)
        q = pg_conn.exec("SELECT * FROM users WHERE organization_id = '#{organization_id}'")
        if q.count > 0
          return q
        else
          throw "Can't find organization #{@organization_id}"
        end
      end

      def get_org_groups(organization_id)
        pg_conn.exec("SELECT * FROM groups WHERE organization_id = '#{organization_id}'")
      end

      def dump_user_data(redis_keys)
        data = dump_related_data(Carto::User, @user_id)
        data[Carto::User] = [@user_data]
        data.reject! { |key, _value| [Carto::Organization, Carto::Group, Carto::FeatureFlag].include?(key) }
        dump_sql_data(data, "user_#{@user_id}")
        dump_redis_keys(redis_keys)
      end

      def dump_role_grants(role)
        roles = user_pg_conn.exec("SELECT oid, rolname FROM pg_roles WHERE pg_has_role( '#{role}', oid, 'member');")
        roles.map { |q| q['rolname'] }.reject { |r| r == role }
      end

      def dump_org_data
        data = dump_related_data(Carto::Organization, @org_id)
        data[Carto::Organization] = [@org_metadata]
        data.select! { |key, _value| [::Carto::Organization, ::Carto::Group].include?(key) }
        dump_sql_data(data, "org_#{@org_id}")
      end

      def dump_sql_data(data, prefix)
        # We sort the order of the tables to be exported so rows are imported before their dependencies, and deleted after.
        # For this, we generate a dependency tree and then use the built-in "tsort" topological sort library
        models = data.keys
        model_dependencies = models.map do |m|
          [m,
           m.reflections.values.select(&:belongs_to?)
           .reject { |r| !r.inverse_of.nil? && r.inverse_of.belongs_to? } # Remove mutual foreign_keys
           .map(&:klass).select { |s| models.include?(s) }]
        end
        models_ordered = TsortableHash[model_dependencies].tsort
        File.open(@options[:path] + "#{prefix}_metadata.sql", "w") do |f|
          models_ordered.each do |model|
            data[model].each do |rows|
              keys = rows.keys.select { |k| !TABLE_NULL_EXCEPTIONS.include?(k.to_s) == (!rows[k].nil?) }
              f.write generate_pg_insert_query(model.table_name, keys, rows)
            end
          end
        end
        File.open(@options[:path] + "#{prefix}_metadata_undo.sql", "w") do |f|
          models_ordered.reverse_each do |model|
            data[model].each do |rows|
              keys = rows.keys.select { |k| !rows[k].nil? }
              f.write generate_pg_delete_query(model.table_name, rows)
            end
          end
        end
      end

      def generate_pg_delete_query(table_name, rows)
        "DELETE FROM #{table_name} WHERE id = '#{rows['id']}';\n"
      end

      def generate_pg_insert_query(table_name, keys, rows)
        "INSERT INTO #{table_name}(#{keys.map { |i| "\"#{i}\"" }.join(',')}) VALUES(#{keys.map { |i| rows[i] == nil ? 'NULL' : "'" + pg_conn.escape_string(rows[i]) + "'" }.join(',')});\n"
      end

      def dump_related_data(model, id, exclude = [])
        data = {}
        id = [id] if id.is_a? Integer or id.is_a? String

        # first dump this model
        query = "SELECT * FROM #{model.table_name} WHERE id IN (#{id.map { |i| "'#{i}'" }.join(', ')});"
        result = pg_conn.exec(query)
        data[model] = (0..result.cmd_tuples - 1).map do |tuple_number|
          result[tuple_number]
        end

        model.reflections.each do |_name, reflection|
          unless exclude.include? reflection.klass or !reflection.through_reflection.nil?

            if reflection.belongs_to?
              ids = data[model].map { |t| t[reflection.association_foreign_key.to_s] }.reject { |t| t == nil }
              next if ids.empty?
              query = "SELECT * FROM #{reflection.table_name} WHERE #{reflection.association_primary_key} IN (#{ids.map { |i| "'#{i}'" }.join(', ')})"
            else
              query = "SELECT * FROM #{reflection.table_name} WHERE #{reflection.foreign_key} IN (#{id.map { |i| "'#{i}'" }.join(', ')})"
            end
            result = pg_conn.exec(query)

            data[reflection.klass] = (0..result.cmd_tuples - 1).map do |tuple_number|
              result[tuple_number]
            end

            ids = data[reflection.klass].map do |data_for_related_key|
              data_for_related_key["id"]
            end
            data.merge!(dump_related_data(reflection.klass, ids, exclude + [model])) { |_, x, y| merge_without_duplicated_ids(x, y) } if ids.length > 0
          end
        end

        data
      end

      def merge_without_duplicated_ids(x, y)
        # this gets called when we try to merge >1 table.
        # it will remove duplicates by ida
        (x + y).uniq { |s| s['id'] }
      end

      def gen_redis_proto(*cmd)
        proto = ""
        proto << "*" + cmd.length.to_s + "\r\n"
        cmd.each { |arg|
          proto << "$" + arg.to_s.bytesize.to_s + "\r\n"
          proto << arg.to_s + "\r\n"
        }
        proto
      end

      def format_redis_dump(str)
        str.gsub("'", %q(\\\'))
      end

      def dump_redis_keys(redis_keys)
        File.open(@options[:path] + "user_#{@user_id}_metadata.redis", "wb") do |dump|
          File.open(@options[:path] + "user_#{@user_id}_metadata_undo.redis", "wb") do |undo|
            redis_keys.each do |k, v|
              dump.write gen_redis_proto("SELECT", v[:db])
              undo.write gen_redis_proto("SELECT", v[:db])
              redis_conn.select(v[:db])
              these_redis_keys = redis_conn.keys(redis_template_user_gsub(v[:template], @user_id, @username))
              these_redis_keys.each do |trd|
                type = redis_conn.type(trd)
                if type == 'string'
                  dump.write gen_redis_proto("SET", trd, redis_conn.get(trd))
                end

                if type == 'hash'
                  redis_conn.hgetall(trd).each do |key, value|
                    dump.write gen_redis_proto("HSET", trd, key, value)
                  end
                end

                if type == 'zset'
                  r = redis_conn.zrangebyscore(trd, '-inf', '+inf')
                  r.each do |r_key|
                    k = redis_conn.zscore(trd, r_key)
                    dump.write gen_redis_proto("ZINCRBY", trd, k, r_key)
                  end
                end
                undo.write gen_redis_proto("DEL", trd)
              end
            end
            dump.write redis_oauth_keys
          end
        end
      end

      def redis_oauth_keys
        dump = ""
        pg_conn.exec("SELECT token,user_id FROM oauth_tokens WHERE type='AccessToken' AND user_id = '#{@user_id}'") do |result|
          dump += gen_redis_proto("SELECT", 3)
          redis_conn.select(3)
          result.each do |row|
            redis_conn.hgetall("rails:oauth_access_tokens:#{row['token']}").each do |key, value|
              dump += gen_redis_proto("HSET", "rails:oauth_access_tokens:#{row['token']}", key, value)
            end
          end
        end
        dump
      end

      def redis_replace_from_template(template, id)
        if template.include?('USERDB')
          user_database(id)
        elsif template.include?('DBUSER')
          database_username(id)
        elsif template.include?('USERNAME')
          @username
        elsif template.include?('USERID')
          id
        else
          ''
        end
      end

      def redis_template_user_gsub(template, id, _username)
        replacement = redis_replace_from_template(template, id)
        if template.include?('USERDB')
          template.gsub('USERDB', replacement)
        elsif template.include?('DBUSER')
          template.gsub('DBUSER', replacement)
        elsif template.include?('USERNAME')
          template.gsub('USERNAME', replacement)
        else
          ''
        end
      end

      def alter_redis_hash(redis_key, _redis_attribute, redis_value, options = {})
        redis_db = options['db'].nil? ? 0 : options['db']
        redis_conn.select(redis_db)
        redis_conn.hset(redis_key, @user_id, redis_value)
      end

      def redis_conn
        @redis ||= Redis.new(host: CartoDB::DataMover::Config[:redis_host], port: CartoDB::DataMover::Config[:redis_port])
      end

      def pg_conn
        @conn ||= PGconn.connect(host: CartoDB::DataMover::Config[:dbhost],
                                 user: CartoDB::DataMover::Config[:dbuser],
                                 dbname: CartoDB::DataMover::Config[:dbname],
                                 port: CartoDB::DataMover::Config[:dbport],
                                 password: CartoDB::DataMover::Config[:dbpass])
      end

      def user_pg_conn
        @user_conn ||= PGconn.connect(host: @user_data['database_host'],
                                      user: CartoDB::DataMover::Config[:dbuser],
                                      dbname: @user_data['database_name'],
                                      port: CartoDB::DataMover::Config[:user_dbport],
                                      password: CartoDB::DataMover::Config[:dbpass])
      end

      def run_command(cmd)
        p cmd
        IO.popen(cmd) do |io|
          Process.wait(io.pid)
        end
        puts "Output code: #{$?}"
      end

      def user_roles
        if @user_data['database_schema'] == 'public'
          roles = ['publicuser', database_username(@user_id)]
        else
          roles = ["cartodb_publicuser_#{@user_id}", database_username(@user_id)]
        end

        Hash[roles.map { |role| [role, dump_role_grants(role)] }]
      end

      def user_info
        { user: @user_data, roles: user_roles }
      end

      def reflections_for_model(model, skip = [], parents = [])
        result = {}
        parents << model.table_name.to_sym
        reflections = model.reflections
        related = reflections.keys.select { |r| reflections[r].through_reflection == nil && !parents.include?(reflections[r].table_name.to_sym) }
        relations = {}
        related.each do |reflection_name|
          reflection = reflections[reflection_name]
          relations[reflection.klass.table_name] = reflection.foreign_key
        end
        result[model.table_name] = { related: related.map { |t| reflections[t].klass.table_name }, relation_for: relations }
        related.each do |rel|
          unless skip.include?(reflections[rel].klass.table_name) || result.keys.include?(reflections[rel].klass.table_name)
            result.merge!(reflections_for_model(reflections[rel.to_sym].klass, (skip + result.keys).uniq, parents))
          end
        end
        result
      end

      def initialize(options)
        @options = options
        @options[:path] ||= ''

        @logs = []

        redis_keys = {
          mapviews: {
            template: "user:USERNAME:mapviews:*",
            var_position: 1,
            type: 'zset',
            db: 5,
            separator: ":"
          },
          map_style: {
            template: "map_style|USERDB|*",
            var_position: 1,
            separator: '|',
            db: 0,
            type: 'string'
          },
          map_template: {
            template: "map_tpl|USERNAME",
            no_clone: true,
            var_position: 1,
            separator: '|',
            db: 0,
            type: 'hash'
          },
          table: {
            template: "rails:USERDB:*",
            var_position: 1,
            separator: ':',
            db: 0,
            type: 'hash',
            attributes: {
              user_id: 'USERID'
            }
          },
          limits_tiler: {
            template: "limits:tiler:USERNAME",
            no_clone: true,
            var_position: 2,
            separator: ':',
            db: 5,
            type: 'hash'
          },
          user: {
            template: "rails:users:USERNAME",
            no_clone: true,
            var_position: 2,
            separator: ':',
            db: 5,
            type: 'hash',
            attributes: {
              database_name: 'USERDB',
              id: 'USERID'
            }
          }
        }

        if options[:id]
          @user_data = get_user_metadata(options[:id])
          @username = @user_data["username"]
          @user_id = @user_data["id"]
          dump_user_data(redis_keys) unless options[:database_only] == true
          redis_conn.quit
          DumpJob.new(
            @user_data['database_host'] || '127.0.0.1',
            @user_data['database_name'],
            @options[:path],
            "#{@options[:path]}user_#{@user_id}.dump",
            options[:schema_mode] ? @user_data['database_schema'] : nil
          ) unless options[:metadata_only] == true

          File.open("#{@options[:path]}user_#{@user_id}.json", "w") do |f|
            f.write(user_info.to_json)
          end
        elsif options[:organization_name]
          @org_metadata = get_org_metadata(options[:organization_name])
          @org_id = @org_metadata['id']
          @org_users = get_org_users(@org_metadata['id'])
          @org_groups = get_org_groups(@org_metadata['id'])
          dump_org_data
          data = { organization: @org_metadata, users: @org_users.to_a, groups: @org_groups }
          File.open("#{@options[:path]}org_#{@org_metadata['id']}.json", "w") do |f|
            f.write(data.to_json)
          end
          @org_users.each do |org_user|
            CartoDB::DataMover::ExportJob.new({ id: org_user['username'], metadata_only: true, path: options[:path] })
            DumpJob.new(
              org_user['database_host'] || '127.0.0.1',
              org_user['database_name'],
              options[:path],
              "#{@options[:path]}user_#{@user_id}.dump",
              org_user['username']) unless options[:metadata_only] == true
          end
        end
        puts "#{@logs.length} errors"
        puts @logs.join("\n")
      end
    end
  end
end

redpajama_set_name: RedPajamaGithub


text:
No More Training Wheels? Google Pixelbook May Soon Run Windows 10
By Don Reisinger
Google has touted its Pixelbook as the must-have Chrome OS device and a real contender to any Windows 10-based machine on the market. But what if the company ultimately decides to sell the Pixelbook with more than just Chrome OS installed?
In an odd twist, the folks over at XDA Developers this week discovered some code inside Chrome OS that suggests that Google's Pixelbook could natively boot both Chrome OS and Windows 10.
According to the report, the code includes mentions of Windows Hardware Certification Kit and Windows Hardware Lab Kit. The inclusion of those code elements suggests that Google is working towards getting certified by Microsoft to allow Windows 10 to run on its Pixelbook.
MORE: Google Pixelbook: Full Review
Earlier this year, reports surfaced saying Google was working on a feature called AltOS for its Pixelbook. The idea was to be able to run two operating systems on the machine. While there had been some reports that the feature was for internal testing and wouldn't be made public, it appears now that the AltOS is Windows 10 and the feature will be made public.
While it's unclear exactly how the feature might work, it appears likely that you'll be able to turn on the Pixelbook and choose whether to run Chrome OS or Windows 10. There's also a question of, if it comes with Windows 10 preinstalled, if it would be Windows 10 Home, Pro or even in S Mode, which mirrors Chrome OS's lightweight sensibilities. It's also possible that, if this comes to fruition, that users would need to provide their own copy of Windows 10. That would let them pick whichever version is best for them.
Google hasn't commented on its plans and it's impossible to know whether the company is simply testing the feature to decide whether to release it or not or really wants to get this to the Pixelbook at some point in the near future. And since certifications are required and Microsoft and Google would ostensibly need to collaborate on the feature to ensure everything is in place, the whole concept could collapse before it becomes a reality.
This story was originally published on Laptop Mag.
Don Reisinger
2 Comments Comment from the forums
gggplaya
They should put a switch on the side of the laptop, to go between windows and chromeOS. Like if you just want to watch netflix, you could save battery life and use chromeOS. But if you needed to be more productive, flip the switch over to windows OS.
irfbhatt
Two systems - very convenient.
This Raspberry Pi VR Headset is Virtually From the 1990s
DirectStorage Causes 10% Performance Hit On RTX 4090 In Forspoken
Intel's Return to HEDT? Xeon W9-3495X Hits Geekbench
Intel Core i9-13900KS Review: The World's First 6 GHz 320W CPU

redpajama_set_name: RedPajamaCommonCrawl


text:
Shiba Inu Token News
Posted by Sarah Smith at 11 Jan 2023, 04:35
Shiba Inu Token Reaches New All-Time High
Shiba Inu Token (SIT) reached a new all-time high of $0.35 on September 12th. The token has seen a significant increase in value in the past few days, reaching its current value after a short period of stagnation.
SIT is currently the eighth largest cryptocurrency by market capitalization, with a total value of $130 million. The token has seen a significant increase in value in the past few days, reaching its current value after a short period of stagnation.
The Shiba Inu Token was created in March of this year as a means of incentivizing users of the SIT platform. The platform is intended to be a decentralized marketplace that allows users to buy and sell products and services using SIT tokens.
The Shiba Inu Token is an ERC20 token and is based on the Ethereum blockchain.
Shiba Inu Token Price Analysis
Shiba Inu Token is traded on several exchanges, with the most active being Binance. The Shiba Inu Token price is down by about 7% over the past 24 hours.
There is a circulating supply of 106,666,666 Shiba Inu Tokens. The market cap of the Shiba Inu Token is $37,370,000.
The Shiba Inu Token price is down by about 7% over the past 24 hours.
Shiba Inu Token Surpasses Bitcoin in Trading Volume
Shiba Inu Token (SHT) has surpassed Bitcoin (BTC) in trading volume on numerous cryptocurrency exchanges, according to data from CoinMarketCap.com.
The Shiba Inu Token is currently trading at $0.80 on CoinMarketCap, compared to $8,913,000 traded for Bitcoin.
The Shiba Inu Token was created in late 2017 as a CryptoKitties-style game token. The aim of the project is to incentivize players to keep the Shiba Inu Token in circulation by offering rewards for holding onto the tokens.
Other notable tokens that have seen significant trading volume over the past 24 hours include Cardano (ADA), EOS (EOS), and NEO (NEO).
Shiba Inu Token on the Rise as Investors Seek Alternatives to Bitcoin
and Ethereum
Shiba Inu Token (SIT) is a new cryptocurrency that is rising in popularity among investors looking for alternatives to Bitcoin and Ethereum. SIT is based on the Ethereum blockchain and uses the ERC20 token standard.
SIT has a number of advantages over other cryptocurrencies. For example, it is faster and more reliable than Bitcoin, and it has a lower transaction fee than Ethereum.
The popularity of SIT may be due to its unique features. Unlike other cryptocurrencies, SIT is not focused on providing a payment system or a digital asset. Instead, it is designed to serve as a tool for exchanging information and experiences between users.
Investors are also attracted to SIT because it offers a degree of anonymity. Unlike Bitcoin and Ethereum, which are transparent networks, SIT allows users to remain anonymous. This may be an appealing feature for criminals and other individuals who want to avoid detection.
SIT is still in its early stages, and it faces a number of challenges. For example, it is not yet clear how SIT will be used in the real world. Additionally, there is no guarantee that SIT will be successful in the long term. Nevertheless, investors are optimistic about the potential of SIT and its potential to become a major player in the cryptocurrency market.
Is Shiba Inu Token the Next Bitcoin?
There is no sure way to predict the future, but it is possible that Shiba Inu Token could become the next Bitcoin. Bitcoin is a well-known cryptocurrency that has become popular for its decentralized nature and its ability to provide a secure and anonymous platform for online transactions.
While there is no guarantee that Shiba Inu Token will become the next Bitcoin, its unique features could make it a popular choice for online transactions. For example, Shiba Inu Token can be used to pay for goods and services online, and its decentralized nature makes it immune to cyber attacks.
If Shiba Inu Token becomes the next Bitcoin, it could revolutionize the way people use cryptocurrencies. It would be interesting to see how its popularity compares to Bitcoin's over time.
Can Shiba Inu Token Continue Its Impressive Run?
At the time of writing, the Shiba Inu token is up by 6.5% in value on the Binance exchange. This is in line with the overall cryptocurrency market trend, which has seen a rise in prices over the past few weeks.
However, it is important to note that the Shiba Inu token is still very young and has a long way to go before it reaches its full potential. Therefore, it is possible that its value may decline over time.
Why Shiba Inu Token is Gaining Popularity
There are a few reasons why the Shiba Inu Token is gaining popularity. For one, it is a unique token that is not available on many other platforms. Additionally, it has a unique reward system that allows users to earn tokens for participating in certain activities. Finally, the token is easy to trade and has a low trading volume, which makes it an attractive investment option.
How Shiba Inu Token Could Revolutionize Cryptocurrencies
The Shiba Inu Token (SIT) could revolutionize cryptocurrencies by providing a new way to pay for goods and services. The SIT is a digital asset that can be used to purchase items from merchants across the globe. The SIT also has the potential to revolutionize the way we pay for goods and services. The SIT will be accepted by many merchants as a form of payment. This will make it easier for people to purchase items and services.
The SIT will also have the ability to be traded on exchanges. This will allow people to profit from the price of the SIT. The SIT will also have the ability to be used as a form of payment for goods and services outside of the cryptocurrency world. This will allow people to use the SIT to pay for items and services in traditional currencies.
The SIT could revolutionize the way we pay for goods and services. This will make it easier for people to purchase items and services. The SIT also has the potential to be used as a form of payment for goods and services outside of the cryptocurrency world. This will allow people to use the SIT to pay for items and services in traditional currencies.
Fwc Token Price Prediction
Shiba Token Coin Market Cap
Shiba Doge Token Price
Threshold Token Price Prediction
Feg Token Coin Price Prediction
Uniswap Token Prediction
Shiba Token Petition
Shiba Token Burn Date
Shiba Bsc Token
Shiba token is uniswap.
Shiba Token Creator
Shiba Inu Token Code
Shiba Wolf Token
Shiba token is not on coinbase.
Where can I buy Shiba Tokens?
Can Shiba Token reach 1 cent?
Ryoshi's token Shiba Inu.
Shib token is a Shiba Inu coin.
Shiba Inu Gold Token
Meta Shiba Token
Shiba Inu Bone Token Release Date
Shiba Inu Token Wallet
What is the Shiba bone token?
How to burn Shiba tokens?
Elon Musk Shiba Token
Ton Token Price Prediction
Genshin Shiba Inu Token
Shiba Floki Token Price
Shiba China Token
Where to buy baby shiba tokens?


You spend most of your hours each day in your home, whether it's sleeping, eating, or spending time with your family. That's why it's so important to have excellent indoor air quality in your home. Ignoring your home's air quality could have you and the people you care about suffering from more colds, allergies, and other respiratory ailments. Luckily, there are more solutions today to help homeowners monitor and improve their home's air quality. Here are seven tools to use to help make your indoor air quality superior.
One of the most important ways to keep your indoor air quality great is to monitor it constantly. In the past, monitoring air quality has proven to be a challenge. Air quality monitoring appliances were often large and expensive as well as not very accurate. There were also contractors who offered air quality monitoring and testing, but that process often took many weeks. Now, there are several small smart monitoring devices in the industry that are marketed to homeowners to help understand what is in the air in their homes.
Besides providing homeowners with information about the air in their homes, technology can also help keep the air cleaner and more breathable for everyone inside. It's essential to invest in a quality air purifier to help achieve this. Today, there are a variety of air purifiers that consumers can purchase. These purifiers help cleanse the air and filter any unwanted pollutants out.
Another common culprit of poor air quality is your home's building materials. Certain types of drywall, paint, and other construction materials may emit fumes into your home and impact the air quality. Scientists and builders are working together to reduce the quantity of vapor emitted from raw materials. One solution is a type of drywall technology that helps lower volatile organic compounds in the air.
Next, homes in the future may start to come equipped with installed sensors that periodically test the indoor air quality. Some of these sensors are used for other purposes as well, such as detecting smoke, fire, or mold. Technology is making these sensors more affordable and convenient for new construction and existing layouts. Some companies are taking the sensors to the next level and syncing them with smartphone apps to help homeowners take control of their home's indoor air quality.
The appliance that makes the biggest contribution to your home's indoor air quality is your heating and air conditioning unit. HVAC manufacturers are starting to realize the importance of indoor air quality and developing new products that keep the air inside pleasant. Additionally, you can work with your local air-conditioner handyman to customize the performance of your unit.
Some homes have indoor air quality problems due to high levels of humidity in the environment. The old fashioned way to reduce humidity was to check for water sources in the home, inspect for mold, or use fans. Sometimes, these methods never truly made a difference. Now, even the dampest rooms can get dry with today's improvements in dehumidifier machines.
Finally, vacuum technology is also catching on to the trend of cleaner indoor air. The newest vacuum cleaner models come with powerful filters that can keep dust and fine particles out of your home. Vacuuming can be automated as well with new robotic vacuum cleaners that periodically scan and cover your room's floors.
If you're an allergy sufferer and you're sensitive to indoor air quality, technology may help you find relief finally. With these technological solutions, indoor air quality is poised to improve in most residences.


Many fashion designers are coming up with top of the line clothes that will be selling off every shelf this Christmas Ed Hardy, Bench, Roxy and Apple Bottom's just to name a few. They are attracting teenagers and young adults. As you can see many young adults are attracted to the original designs.


text:
Q: VS17 не определяет библиотеку VS 17 не определяет библиотеку pysstx3. Я уже пробовал сделать установку библиотеки. Работаю в Python 3.6 т.к. в 3.7 нужная мне библиотека PyAudio не устанавливается.
import speech_recognition as sr
import os
import sys
import webbrowser
import pysttx3

def talk (words):
    engine = pyttsx3.init()
    engine.say(words)
    engine.runAndWait()
talk ("Cпроси что-нибудь")

A: Я понял, при изменении окружения библиотек, нужно создавать новый проект.

redpajama_set_name: RedPajamaStackExchange


text:
BayArt
New Perspective on Life
72+ Best Christian Love Quotes: Exclusive Selection
July 28, 2020 July 28, 2020 by Tahsincan
John 13:35 "By this all will know that you are My disciples, if you have love for one another"
The heart of Christian love may consist the love of Jesus Christ for humanity, the love of Christians for Christ, and the love of Christians for others. Profoundly inspirational Christian love quotes will make you look at life differently and help you live a meaningful life.
If you're searching for inspiring religion quotes and best bible quotes that perfectly capture what you'd like to say or just want to feel inspired yourself, browse through an amazing collection of inspirational God's grace quotes, best God's timing quotes and quotes about God blessing.
Famous Christian Love Quotes
Lord, help us to live the virtue of generosity, to love without limits. — Pope Francis
Where love is, God is. — Henry Drummond
Christian love is the only kind of love in which there is no rivalry, no jealousy. There is jealousy among the lovers of art; there is jealousy among the lovers of song; there is jealousy among the lovers of beauty. The glory of natural love is its monopoly, its power to say, 'It is mine. ' But the glory of Christian love is its refusal of monopoly. — George Matheson
Love is the doorway through which the human soul passes from selfishness to service. — Jack Hyles
The first purpose of your life is to be loved by God! Yes, it is important to serve him, obey, and trust him, but your first purpose is to love him. — Rick Warren
In biblical thinking, genuine love exists only when good works are done in a context where God rather than the doer gets the credit. — Daniel Fuller
In the poor and outcast we see Christ's face; by loving and helping the poor, we love and serve Christ. — Pope Francis
It's not complicated. Just love the one in front of you. — Heidi Baker
Though our feelings come and go, God's love for us does not. — C.S. Lewis
More people have been brought into the church by the kindness of real Christian love than by all the theological arguments in the world. — William Barclay
I cannot love you as I love myself until I love God as I ought to love Him. — Jack Hyles
Those in the circle of Christ had no doubt of his love; those in our circles should have no doubt about ours. — Max Lucado
The more we love, the more love we have to offer. So it is with God's love for us. It is inexhaustible. — Mary C. Neal
A woman's heart should be so hidden in God that a man has to seek Him just to find her. — Max Lucado
In a world characterized by loneliness and despair, we can reach out in love to those around us. Or, as St. Francis once said, we can preach the gospel all the time; if necessary, use words. — Phil Callaway
Love is the joy we get from God when we put His benefit and the benefit of another person before our own. — Regina Clarinda
In Christian marriage, love is not an option. It is a duty. — R. C. Sproul
To love another person is to see the peace of God. — Victor Hugo
We live by faith. We love by faith. — Beth Moore
I am convinced the greatest act of love we can ever perform for people is to tell them about God's love for them in Christ. — Billy Graham
One of the major ways we love our neighbor as ourselves is by praying for them–by interceding for them. — Michael Caput
Peace is not automatic. It is a gift of the grace of God. It comes when hearts are exposed to the love of Christ. But this always costs something. For the love of Christ was demonstrated through suffering and those who experience that love can never put it into practice without some cost. — Festo Kivengere
Love pays attention. Love listens to the fears and the doubts of others and treats them with respect. Love accepts others the way Jesus accepts you. — Rick Warren
It is not possible to love God and hate your brother. — Russell M. Stendal
If we are not full of Him we have nothing to offer to anyone else. — Heidi Baker
When to give grace? I'd rather stand before God knowing I loved others too much rather than regretting that I judged too harshly. — Lysa TerKeurst
The biblical concept of love says no to acts of selfishness within marital and other human relationships. — R. C. Sproul
God's love supply is never empty. — Max Lucado
We become what we love and who we love shapes what we become. If we love things, we become a thing. If we love nothing, we become nothing. Imitation is not a literal mimicking of Christ, rather it means becoming the image of the beloved, an image disclosed through transformation. This means we are to become vessels of God's compassionate love for others. — Clare of Assisi
Love has a quality that it becomes stronger as the time passes. — Adam Green
What really matters in life is that we are loved by Christ and that we love Him in return. In comparison to the love of Jesus, everything else is secondary. And, without the love of Jesus, everything is useless. — Pope John Paul II
Faith makes all things possible. Love makes all things easy. — Dwight L. Moody
If love is the soul of Christian existence, it must be at the heart of every other Christian virtue. Thus, for example, justice without love is legalism; faith without love is ideology; hope without love is self-centeredness; forgiveness without love is self-abasement; fortitude without love is recklessness; generosity without love is extravagance; care without love is mere duty; fidelity without love is servitude. Every virtue is an expression of love. No virtue is really a virtue unless it is permeated, or informed, by love. — Richard Rohr
When I have learned to love God better than my earthly dearest, I shall love my earthly dearest better than I do now. — C. S. Lewis
Even though people about us choose the path of hate and violence and warfare and greed and prejudice, we who are Christ's body must throw off these poisons and let love permeate and cleanse every tissue and cell. Nor are we to allow ourselves to become easily discouraged when love is not always obviously successful or pleasant. Love never quits, even when an enemy has hit you on the right cheek and you have turned the other, and he's also hit that. — Clarence Jordan
Love is worthless unless it acts out, unless it's expressed in deed and behavior. — David Jeremiah
The overriding character trait of Jesus is love, and the entire Gospel story is woven with love. Sometimes it's not easy, and oftentimes it requires sacrifice, but it's when we love that we are the most like Jesus. — Steven Furtick
Ah, Lord Jesus! I never knew Your love till I understood the meaning of Your death. — Charles Spurgeon
God did not create the strife between races, nor did He intend for it to be that way. Strife between races and ethnic groups comes from sin-and sin resides in the human heart. The Bible says, "What causes fights and quarrels among you? Don't they come from your desires that battle within you?" (James 4:1). When one group or one race claims it is superior to another, pride has taken control-and pride is a sin.Instead, God wants us to learn to accept each other and love each other-and this becomes possible, as we turn our lives over to Christ and allow Him to change us from within. — Billy Graham
If we claim to love God, but don't love each other our love is nothing and meaningless. — David Alley
Determine to pray more words over your marriage than you speak about your marriage. — Lysa TerKeurst
There is nothing you can do that will make God stop loving you. You could try, but you simply can't do it – because his love for you is based upon his character and not on anything you do or say or feel. — Rick Warren
In Christ, there is nothing I can do that would make You love me more and nothing I have done that makes You love me less. — J. D. Greear
When we love, we always strive to become better than we are. When we strive to become better than we are, everything around us becomes better, too. — Paulo Coelho
He (God) loved us not because we are lovable, but because He is love. — C. S. Lewis
In the midst of our failed attempts at loving Jesus, His grace covers us. — Francis Chan
Think on these two powerful points: Lean on God in every situation and love others as unselfishly as you possibly can. — Joyce Meyer
The first secret to loving others is to immerse yourself in a love relationship with God the Father, God the Son, and God the Holy Spirit – and abide there. — Anne Graham Lotz
The art of love is God at work through you. — Wilferd Peterson
Do not waste time bothering whether you 'love' your neighbor; act as if you did. — C.S. Lewis
Love is an act of endless forgiveness, a tender look which becomes a habit. — Peter Ustinov
Theology without love simply is very bad theology. — Paul David Tripp
Let us learn to live with kindness, to love everyone, even when they do not love us. — Pope Francis
Love, in the words of the Master, is the shining commandment: LOVE ONE ANOTHER. — Wilferd Peterson
The first duty of love is to listen. — Paul Tillich
Do not think that love in order to be genuine has to be extraordinary. What we need is to love without getting tired. Be faithful in small things because it is in them that your strength lies. — Mother Teresa
Love is and has always been His idea. He came to love us and to teach us how to love. When we do this, life is exciting, beautiful and rewarding. — Joyce Meyer
Love is not talk or theory; it's action. In fact the Bible says that we cannot be walking in love if we see a brother in need, have what it takes to meet his need, and will not do anything to help him. — Joyce Meyer
Never procrastinate in showing love. Don't delay. Don't put it off. Do it now. — Rick Warren
Love is not only something you feel, it is something you do. — David Wilkerson
A Christian is: a mind through which Christ thinks, a heart through which Christ loves, a voice through which Christ speaks, and a hand through which Christ helps. — Saint Augustine
Being a disciple means being constantly ready to bring the love of Jesus to others, and this can happen unexpectedly and in any place: on the street, in a city square, during work, on a journey. — Pope Francis
Jesus healed people one at a time because God cares about individual people. — Andy Stanley
Cherish your family connections. They are one of God's greatest ways of demonstrating his love and fellowship. — Norman Vincent Peale
A passion to obey Christ is born out of our relationship with him. The more we love him, the more we want him to be a part of our affairs. — Calvin Miller
You can give without loving, but you can never love without giving. — Robert Louis Stevenson
I have decided to stick with love. Hate is too great a burden to bear. — Martin Luther King, Jr.
For instance, God teaches us to love by putting some unlovely people around us. It takes no character to love people who are lovely and loving to you. — Rick Warren
Christian love, either towards God or towards man, is an affair of the will. — C. S. Lewis
Learn to commit every situation to God, and trust Him for the outcome. God's love for you never changes, no matter what problems you face or how unsettled life becomes. — Billy Graham
From the Cross, Christ teaches us to love even those who do not love us. — Pope Francis
82+ Best Rainbow Quotes: Inspiring Selections
141+ Best Self-Discovery Quotes: Exclusive Selection
117+ POWERFUL Stay Strong Quotes Through Hard Times
185+ Best Graduation Quotes to Inspire Big Adventure
Categories Quotes Post navigation
100+ Best Catholic Quotes: Exclusive Selection
44+ Best God's Grace Quotes: Exclusive Selection
Share Your Opinion	Cancel reply
Copyright/DMCA Issue
If you are a copyright holder and believe your content was used, please let us now at. Submit a notice at here. We investigate your specific inquiry and resolve it within 24 hours. Thanks.
This site is not intended to provide and does not constitute medical, legal, or other professional advice. The content on BayArt is designed to support, not replace, medical or psychiatric treatment. Please seek professional care if you believe you may have a condition.
© 2021 BayArt • Built with GeneratePress


text:
1. Praseeda Sasanka
2. Sowjanya
3. Zahra

### Data Sets Priorities

1. Excess Deaths

 This data set helps us in evaluating the cause of deaths in various states and increase the heath consciousness among the people. We are interested to know the causes and educate our family members from the findings we get from this data

2. Nebraska Crime

 The crime information is always of interest to the people living in that particular state. It helps the individuals in taking necessary precautions as and when required. Also helps us to evaluate the safety measures in a state as internatioanl students and also ensure our parents that we live in a safe state peacefully

 3. Software Engineering Teams

 4. Storm Events.

 ### List of Files
1. LICENSE
> This file consiste of the License information for this repository
2. NCHS_-_Potentially_Excess_Deaths_from_the_Five_Leading_Causes_of_Death_second%20one.csv
> This is the Excess Deaths data set in an excel format
3. Deliverables/DataMiners_WorkPlan_WorkPlan.md
> This is an informal document which includes a brief introduction of the data set, draft research questions, work plan, project estimate and target audience
4. Deliverables/DataMiners_ProjectPlan_GanttChart.pdf
> This is a detailed representation of the projet plan


text:
Q: jQuery UI Sortable - how to include/exclude multiple "items"? I have a working example of the jQuery UI Sortable function. I'm applying it to a HTML table to drag and drop and sort table rows. It works great except I want to exclude certain classes of row from being sortable. Using the items parameter, I can successfully exclude ONE class (the "list-button-bar" class), but I can't for the life of me figure out the syntax for how to exclude more than one class. For example, I want to exclude  and other classes of
.
This is probably one of those ones that is in the documentation but I'm not familiar enough yet with jQuery UI to know even what to search for.
Here's the working code:

A: To exclude multiple classes of tr use:
$("#applications_list tbody.list-tbody").sortable({
        items: "tr:not(.list-button-bar,.other-class1,.other-class2)",
        cursor: 'crosshair'
});

A: Have you tried using a comma? The items option takes a jQuery selector:
  $("#applications_list tbody.list-tbody").sortable({
    items: "tr:not(.list-button-bar), :not(th)", // Excludes
s without a class and s
    cursor: 'crosshair'
  });

A: In Jquery UI 1.8 use the following:
$("#applications_list tbody.list-tbody").sortable({
    // Excludes
s without a class and s
    filter: "tr:not(.list-button-bar), :not(th)"
});


text:
\section{Introduction}\label{sec:intro}
The Sun, like many stars in the main-sequence,  possesses a convectively
unstable outer envelope surrounding an inner stable core.
Given its proximity to us, we observe the Sun with high spatial and
temporal resolution.
Measurements of plasma flows on the surface reveal a highly intricate
and dynamic cellular structure, highlighting a range of spatio-temporal
scales \citep[e.g.][]{miesch2005lsrp,rast2003}.
Solar convection, which is primarily driven by buoyancy and radiative cooling
at the surface, manifests in an overturning of fluid between the base of the
convection zone and the solar surface.
Since the fluid is ionized everywhere
\citep[almost fully ionized for 97\% solar radius and
partially ionized in the top 3\%; ][]{nordlund2009lsrp}, it serves to carry magnetic field, playing
a crucial role in setting solar dynamics. Hence,
an understanding of solar convection will enable us to better appreciate thermal and angular momentum transport \citep{aerts2019},
ultimately bringing us closer to explaining the 11-year solar magnetic cycle,
a long-standing problem in solar physics.

Solar convection plays out in an extreme parameter regime; the Reynolds number, $Re \sim 10^{14}$,
and the Prandtl number, $Pr \sim 10^{-7}$.
These regimes are inaccessible to experiments and hence,
attempts to understand the physics of turbulent convection of the
Sun involve numerical analysis. However, conservative estimates of
the viscous dissipation scale of the Sun place it at $\sim 100$ m \citep{brummell95,lesieur-metais-96},
six orders of magnitude smaller than the largest length scale i.e the radius of the Sun, making direct numerical simulation
\citep{orszag1970,moin-mahesh-1998} intractable. Hence the inclination to use
different types of numerical simulations to study different phenomenon:
(a) high-resolution local simulations are used to study dynamics of near-surface layers
\citep{stein-nordlund-1998, rincon2005} and (b) large-scale flows such as differential rotation
are studied using global models based on the anelastic equations
\citep{cattaneo2003, derosa-gilman-toomre-02} etc.
Simulations attempt to reproduce different aspects of observed solar convection.
Hence robust inferences from observational data become a necessity, not only as
a standalone measurement by itself, but also as a reference point for validation of
numerical simulations.

Observational studies of convection have found three prominent spatial
scales. Granulation is a result of vertical advection and downward plume formation
driven by radiative losses at the photosphere.
Granules are found to occur at spatial scales of $\sim 1$ Mm, with
typical lifetimes of $0.2$ hr \citep{herschel-1801, richardson-schwarzschild-1950, leighton62}.
Although mesogranulation was initially
observed at a length scale of $\sim 5$ Mm \citep{november-etal-81,muller92}
and a lifetime of $\sim 3$ hours, full-disk observations
from HMI have established the absence of peak in
convective power at those scales \citep{hathaway2015,
rincon-2017}.
Supergranulation is observed at $\sim 30$ Mm, which advects granular structures \citep{muller92,rieutord2010}.

\cite{rieutord2001} showed that granules serve as good tracers of local plasma
flows at meso- and supergranular scales over long time scales. Local correlation
tracking of granules \citep{november_simon1988} was used to
study convection by \cite{georgobiani2006} in granular to supergranular-scale
simulations and they found the velocity spectrum to be approximately a power
law for scales larger than granules. \cite{rieutord2010} studied the high-wavenumber power spectrum using granulation tracking for studying horizontal
and vertical velocity by measuring Doppler velocity at disk
center. Estimates of the convection spectrum of
radial, toroidal and poloidal flows were made by \cite{hathaway2015} (H15 hereafter) by employing a different method for separately
estimating these flows. They noted that the spectrum was dominated by
poloidal flows for spherical harmonic degree $\ell > 30$ and toroidal flows for
$\ell < 30$.

The aim of the work is to estimate the vector velocity spectrum on the
surface of the Sun, using line-of-sight Dopplergrams. HMI provides us with Dopplergrams measured with a \(720\)s cadence.
Since we measure only the line-of-sight component of
velocity on less than half the surface of the
Sun, there is a loss of information. Hence, projecting the observed
velocities on to any orthonormal basis on the surface of the Sun is imperfect.
This is  quantified using a mixing-matrix which relates the ``true'' spectral
parameters to their observed counterparts.
Previously, \cite{rincon-2017} obtained robust vector velocity
spectrum using coherent structure tracking analysis (CST) of granules
\citep{roudier-2012}. The uniqueness
in our approach is the ability to obtain the toroidal and
poloidal (both vertical and horizontal) convection spectrum
from the line-of-sight Dopplergrams directly. This enables us to
probe the spectral features of the tiniest scales of the observation.
The 16 megapixel Dopplergram images from the HMI enable us to obtain
spectra upto $\ell$ = 1545.
Another novelty of this work is the usage of HEALPix
\footnote{HEALPix website: \url{http://healpix.sf.net/}} \citep{healpix} for constructing pixels on the solar
surface, instead of the traditional Gaussian collocated grid.
The Dopplergram images have more pixels
near the equator than the poles.
Irrespective of longitude, the traditionally used Gaussian
collocated grid has the same number of pixels along longitude near the
poles and the equator. This results in super-sampling near
the poles and under-sampling near the equator. Thus, HEALPix
provides us with a natural pixelization on the sphere for
solar Dopplergram data.

The outline of the paper is as follows. The theoretical background about spectral
decomposition and spectral mixing are dealt with in Section~\ref{sec:theory}. Before
applying the present method to HMI data, the raw data need to be cleaned to remove
systematical errors, described in Section~\ref{sec:data-prep}. We
discuss corrections due to the motion of HMI in Section~\ref{subsec:obs-motion}, compensating
for gravitational redshift in Section~\ref{subsec:grav-redshift} and removal of large-scale
features in Section~\ref{subsec:conv-bs}. The analysis of cleaned HMI data is
discussed in Section~\ref{sec:data-analysis}. The validation of the
inversion procedure is discussed in Section~\ref{sec:goodness-inversion}.
The results are discussed in Section~\ref{sec:results-discussion}.

\section{Theoretical Background}\label{sec:theory}
The Doppler velocity on the surface \(\tilde{\vec{u}}(\theta, \phi)\)
may be expanded in the vector spherical harmonic (VSH) basis  \( (\vec{Y}_{\ell m}
, \vec{\Psi}_{\ell m}, \vec{\Phi}_{\ell m}) \) according as
\begin{equation}\label{eq:vecsph}
  \tilde{\vec{u}}(\theta, \phi)
  = \sum_{\ell m} \left( \tilde{u}_{\ell m} \vec{Y}_{\ell m}(\theta, \phi)
            + \tilde{v}_{\ell m} \vec{\Psi}_{\ell m}(\theta, \phi)
            + \tilde{w}_{\ell m} \vec{\Phi}_{\ell m}(\theta, \phi) \right).
\end{equation}
Definitions and properties of the basis are given in Appendix
\ref{sec:vsh}. We use both  $(\ell, m)$ and $(s, t)$ to denote
spherical harmonic degree and the azimuthal order respectively.
The $w_{\ell m}$ component is called the toroidal component and
$(u_{\ell m}, v_{\ell m})$ are together called as the poloidal
component. For the sake of differentiating, we would use the term
``radial'' to refer to the poloidal-vertical component $u_{\ell m}$
and ``poloidal'' to refer to poloidal-horizontal component $v_{\ell m}$.
If we observe all components of velocity on the entire solar surface, then
we can perfectly isolate all VSH components
\(\tilde{U}_{\ell m} = (\tilde{u}_{\ell m}, \tilde{v}_{\ell m}, \tilde{w}_{\ell m})\), by
exploiting the orthonormality of the VSH basis.
However, we observe only the velocity projected on to the line-of-sight vector
\(\hat{\vec{\ell}}(\theta, \phi)\),
\begin{equation}
  \vec{u}(\theta, \phi) = \left[\hat{\vec{\ell}}(\theta, \phi) \cdot \tilde{\vec{u}}(\theta, \phi)\right]
  \hat{\vec{\ell}}(\theta, \phi),
\end{equation}
over less than half of the solar surface. We use tilde to denote
the true spectral components of velocity and to distinguish them from
the spectral components of the line-of-sight projected velocity.
Hence, observed velocities in spectral domain, \(U_{st} = (u_{st},
v_{st}, w_{st})\)
are given by Eqn.~(\ref{eqn:ulm}, \ref{eqn:vlm}, \ref{eqn:wlm}),
\begin{align}
 u_{st} & = \int d\Omega \, W(\theta, \phi)\,  \vec{u} \cdot \vec{Y}^*_{st} \label{eqn:ulm}\\
 v_{st} & = \int d\Omega \, W(\theta, \phi)\,  \vec{u} \cdot \vec{\Psi}^*_{st} \label{eqn:vlm}\\
 w_{st} & = \int d\Omega \, W(\theta, \phi)\,  \vec{u} \cdot \vec{\Phi}^*_{st} \label{eqn:wlm},
\end{align}
where \(W(\theta, \phi)\) is a window function which has value \(1\)
where the Sun is observed and \(0\) otherwise.
Using Eqn.~(\ref{eq:vecsph}), we write the observed
spectral components $U_{st}$ in terms of the true spectral components of
velocity $\tilde{U}_{\ell m}$,
\begin{equation}\label{eqn:leak1comp}
 u_{st} = \sum_{\ell} \sum_{m=-\ell}^{\ell}\left(
 \tilde{u}_{\ell m} M^{(uu)\ell m}_{st} +
 \tilde{v}_{\ell m} M^{(uv)\ell m}_{st} +
 \tilde{w}_{\ell m} M^{(uw)\ell m}_{st}\right),
\end{equation}
\begin{equation}\label{eqn:leak2comp}
 v_{st} = \sum_{\ell} \sum_{m=-\ell}^{\ell} \left(
 \tilde{u}_{\ell m} M^{(vu)\ell m}_{st} +
 \tilde{v}_{\ell m} M^{(vv)\ell m}_{st} +
 \tilde{w}_{\ell m} M^{(vw)\ell m}_{st} \right),
\end{equation}
\begin{equation}\label{eqn:leak3comp}
 w_{st} = \sum_{\ell} \sum_{m=-\ell}^{\ell} \left(
 \tilde{u}_{\ell m} M^{(wu)\ell m}_{st} +
 \tilde{v}_{\ell m} M^{(wv)\ell m}_{st} +
 \tilde{w}_{\ell m} M^{(ww)\ell m}_{st} \right).
\end{equation}
In Eqns.~(\ref{eqn:leak1comp}, \ref{eqn:leak2comp}, \ref{eqn:leak3comp}), the matrix $M_{\ell m}^{st}$
quantifies the extent of mixing of true spectral coefficients
corresponding to quantum numbers given by $(\ell, m)$ into
observed spectral coefficients specified by $(s, t)$.
Note that the mixing occurs not only between quantum
numbers, but also among the radial, poloidal and
toroidal (VSH) components.
This is indicated by the superscript parenthesis.
For instance, the mixing matrix $M^{(vw)\ell m}_{st}$
quantifies the contribution of the true toroidal
component ($w_{st}$) towards the observed poloidal
component ($v_{\ell m}$). The mixing matrices
are given in Eqn.~(\ref{eqn:mixmat-compact}),
\begin{equation}
 \label{eqn:mixmat-compact}
 M^{(ij)\ell m}_{st} = \int d\Omega \, W(\theta, \phi)\,
 \mathcal{J}^{(ij)}_{\ell m} \mathcal{K}^{(ij)*}_{st},
\end{equation}
where $i, j$ are variables which can be any of $u, v, w$. The set of all $\mathcal{J}, \mathcal{K}$
are given in Table~(\ref{tab:mixlist})
\begin{table}[!h]
\label{tab:mixlist}
\caption{Table of $\mathcal{J}$ and $\mathcal{K}$}
\centering
\begin{tabular}{|c|c|c|c|}
\hline
  & $i=u$ & $i=v$ & $i=w$ \\
\hline
$j=u$ &
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{Y}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{Y}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{Y}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{\Psi}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{Y}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{\Phi}^*_{st}$
\\
\hline
$j=v$ &
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Psi}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{Y}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Psi}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{\Psi}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Psi}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{\Phi}^*_{st}$
\\
\hline
$j=w$ &
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Phi}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{Y}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Phi}_{\ell m}$;
$\mathcal{K}^*_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Psi}^*_{st}$
&
$\mathcal{J}^{(ij)}_{\ell m} = \hat{\vec{\ell}} \cdot \vec{\Phi}_{\ell m}$;
$\mathcal{K}^{(ij)*}_{st} = \hat{\vec{\ell}} \cdot \vec{\Phi}^*_{st}$
\\
\hline
\end{tabular}
\end{table}
The linear relationships between the observed spectral components
$U_{st}$ and the true spectral components $\tilde{U}_{\ell m}$
are given by Eqn.~(\ref{eqn:ulm} -- \ref{eqn:wlm}).
These relationships may be combined into a single equation by
defining vectors $\mathcal{U}$, $\tilde{\mathcal{U}}$ in the
following manner,
\begin{align}
 \mathcal{U} & =
 \begin{bmatrix}
  \, \, \, \hdots \, \, \, u_i \, \, v_i \, \, w_i \, \, \, \hdots \, \, \,
 \end{bmatrix}^T \label{eqn:vecu} \\
 \tilde{\mathcal{U}} & =
 \begin{bmatrix}
  \, \, \, \hdots \, \, \, \tilde{u}_i \, \, \tilde{v}_i \, \, \tilde{w}_i \, \, \, \hdots \, \, \,
 \end{bmatrix}^T, \label{eqn:vecu-tilde}
\end{align}
where \(i\) is a combined index denoting the quantum numbers \((\ell, m)\).
\begin{equation}
 \begin{bmatrix} \vdots\\ u_i \\ v_i \\ w_i \\ \vdots \end{bmatrix} =
 \begin{bmatrix}
  \ddots & \vdots & \vdots & \vdots & \iddots \\
  \dots  & M^{(uu)j}_i & M^{(uv)j}_i & M^{(uw)j}_i & \dots \\
  \dots  & M^{(vu)j}_i & M^{(vv)j}_i & M^{(vw)j}_i & \dots \\
  \dots  & M^{(wu)j}_i & M^{(wv)j}_i & M^{(ww)j}_i & \dots \\
  \iddots & \vdots & \vdots & \vdots & \ddots
 \end{bmatrix}
 \begin{bmatrix} \vdots\\ \tilde{u}_j \\ \tilde{v}_j \\ \tilde{w}_j \\ \vdots \end{bmatrix},
 \label{eqn:mixing-matrix}
\end{equation}
which may be written in compact form as
\begin{equation}
 \mathcal{U} = \mathcal{M} \tilde{\mathcal{U}}.
 \label{eqn:mixing-matrix-compact}
\end{equation}

\section{Data Preprocessing}\label{sec:data-prep}
For this study of surface convection, we use line-of-sight Dopplergrams
recorded by HMI, which observes the full solar disk at a resolution of 1 arc
second \citep{hmi2012}. Each Dopplergram is constructed using 72
filtergrams across the Fe-I line (6173.3 $\AA$) at a cadence of 720
seconds. The HMI data pipeline also provides us with a Dopplergram deconvolved
with the Point Spread Function (PSF) of the instrument, through the series
\textit{hmi.V\_720s\_dConS} (1 image per day), which is what we use for this
study. The raw image obtained from HMI is shown in Fig.~\ref{fig:rawMap}.

\begin{figure}[!ht]
\centering
\includegraphics[width=\linewidth]{rawMap.png}
\caption{Map of raw Dopplergram after the pixels outside $0.95 r_{disk}$ have been removed. The maximum
value is $+3840$ ms$^{-1}$ and the minimum value is $-4636$ ms$^{-1}$}
\label{fig:rawMap}
\end{figure}

The preprocessing of the raw data involves removal of the following large-scale features
which are spurious to the present study:
\begin{enumerate}
 \item Motion of the observer (HMI).
 \item Gravitational redshift.
 \item Convective blueshift.
 \item Differential rotation.
 \item Meriodional circulation.
 \item Imaging artefacts.
\end{enumerate}

\subsection{Motion of the Observer}\label{subsec:obs-motion}
The Dopplergram measures the relative velocity between the observer and the
source. To measure the velocity on the solar surface in the rest frame of
the Sun, the velocity of the spacecraft needs to be accounted for.
The HMI data file provides the observer velocity through the keywords
\verb|OBS_VR, OBS_VN, OBS_VW| for velocities in the radial,
north-south and east-west directions respectively. In angular
heliocentric coordinates, \((\sigma, \chi)\),
we write the velocity correction as Eqn.~(\ref{eqn:velCorr}),
\begin{equation}
 v_{obs} = V_R \cos(\sigma) - V_N \sin(\sigma) \cos(\chi) - V_W \sin(\sigma) \sin(\chi) \label{eqn:velCorr}.
\end{equation}
This correction is shown over the solar disk in Fig.~\ref{fig:velCorr}.

\begin{figure}[!ht]
\centering
\includegraphics[width=0.6\linewidth]{velCorr.png}
\caption{Correction to the Dopplergram due to motion of
the observer, in ms$^{-1}$. The dominant effect is seen in the
east-west direction, as the space-based SDO has the
largest component of velocity in the direction of  its orbital motion.}
\label{fig:velCorr}
\end{figure}

\subsection{Gravitational Redshift}\label{subsec:grav-redshift}
Gravitational redshift is the consequence of the source
(solar surface) being at a higher gravitational potential than the observer
(HMI). To leading order, the density profile of the standard solar model \citep{jcd_models}
is spherically symmetric. It was subsequently shown by \cite{basu96b}
that deviations of density from the solar model are at most $1.5$\%
and the deviations are also a function of only the radius, implying that the gravitational
potential is also only a function of radius. Therefore, the
surface of the Sun is at the same gravitational potential irrespective
of the angular coordinates $(\theta, \phi)$.
The redshift computed using Einstein's principle of equivalence
for an observer at infinity is found to be $636$ ms$^{-1}$, which
is in agreement with observations \citep{beckers77,lopresto91,cacciani06}.
The Dopplergram, after removal of contributions due to observer velocity
and gravitational redshift, is shown in Figure~\ref{fig:afterVelCorr}.

\begin{figure}[!ht]
\centering
\includegraphics[width=0.8\linewidth]{raw-velCorr.png}
\caption{Dopplergram after removal of effects due to motion of the
observer and gravitational redshift.}
\label{fig:afterVelCorr}
\end{figure}

\subsection{Convective Blueshift, Differential Rotation and Meridional Circulation}
\label{subsec:conv-bs}
Outside of localized strong magnetic field concentrations, granules
dot the entirety of the solar surface. Hot plasma outflows from the
cell centers radiate heat and cold plasma plunges into the solar
interior through the much narrower intergranular
lanes. Hence, at these scales, we would observe a blueshift in the bulk of the
granule and redshift at the intergranular lanes. The granules also appear
brighter owing to their higher temperatures. Hence, unresolved granules
throughout the surface of the solar disk gives rise to an apparent blue shift,
which is known as convective blueshift or limb-shift
\citep{beckers1978,dravins1982}.
The limb-shift is represented by a polynomial of degree $5$ in heliocentric
coordinates \citep{thompson2006}.

\begin{equation}
 \hat{\vec{\ell}} \cdot \vec{u}_{\text{LS}} = \sum_{i=0}^5 c_i P_i(x),
\end{equation}
where $\vec{u}_{\text{LS}}$ is the limb-shift, $\hat{\vec{\ell}}$ is the line-of-sight
vector, \(x = 1 - \cos\rho\), \(\rho\) being the heliocentric angle and
\(P_i\) are the shifted Legendre polynomials (Appendix \ref{sec:legpoly}).

Differential rotation is an axisymmetric toroidal component of
flow, which is symmetric about the equator. Meridional circulation
is an axisymmetric poloidal flow which is antisymmetric
about the equator. Hence differential rotation
is expressed in terms of the odd-degree toroidal
components and meridional circulation using even-degree poloidal components, given by
Eqn.~(\ref{eqn:rot}, \ref{eqn:MC}),

\begin{equation}
 \vec{u}_{\text{DR}} = \sum_{\ell=1, 3, 5} w_{\ell 0}\, \hat{\vec{r}} \times \vec{\nabla}_h Y_{\ell 0},
 \label{eqn:rot}
\end{equation}

\begin{equation}
 \vec{u}_{\text{MC}} = \sum_{\ell=2, 4} v_{\ell 0}\,
 \vec{\nabla}_h Y_{\ell 0}
 \label{eqn:MC}.
\end{equation}
We perform a least-squares fit to estimate the values of
\(w_{\ell 0}\) and \( c_i\).
The total sum of all three components is shown in Figure~\ref{fig:fitted}.

\begin{figure}[!ht]
\centering
\includegraphics[width=\linewidth]{rotMCls.png}
\caption{Map showing the combined effect of differential rotation, meridional
circulation and convective blueshift. The map has a greater amount of blueshift
(\(\approx -2500 \) ms\(^{-1}\)) than redshift (\(\approx 550\) ms\(^{-1}\))
because of the limb-shift correction to be a blueshift all over the solar disk
whereas the correction due to differential rotation is red and blue shifted by
equal magnitudes.}
\label{fig:fitted}
\end{figure}

The final effect that needs to be removed is the imaging artefact. This appears in
the form of fringes on the solar disk. We obtain the artefact by averaging over
100 images and subtracting the mean.
After removing all these effects, the residual map,
shown in Figure~\ref{fig:residualMap}, is ready for analysis.

\begin{figure}[!ht]
\centering
\includegraphics[width=\linewidth]{residualMap.png}
\caption{Residual map after the removal of rotation, meridional circulation
and limb shift. The disk center is lighter than the limb indicating very
low radial velocity component when compared to horizontal velocity.}
\label{fig:residualMap}
\end{figure}

\newpage
\section{Data Analysis}\label{sec:data-analysis}
We perform a spectral analysis on the preprocessed data  using the Python
package \texttt{healpy} \citep{healpy}. This is based on the HEALPix scheme. The HEALPix scheme
divides the surface of a sphere into $N_{\text{pix}}$ pixels of equal area. It also
enables an accurate representation of all signals with $\ell \le \ell_{\text{max}}$, where
$\ell_{\text{max}}$ depends on $N_{\text{pix}}$. Each pixel is denoted by its coordinates
at its centre. Hence, these pixels are different from grid points on which HMI Dopplergram
data are recorded. A schematic overlay of a HEALPix pixel and grid points from HMI
is shown in Figure~\ref{fig:healpy-hmi}. Motivated by radial-velocity measurements of the
Sun, which are obtained using the disk-integrated velocity \citep{wright-kanodia-2020}, we
use an integrated velocity to determine the effective Doppler velocity of the pixel,
\begin{equation}
 v^{\text{hp}} A_{\text{pix}} = \int_{A_\text{pix}} dA \, \, v^{\text{HMI}}
 \approx \sum_i dA_i v_i^{\text{HMI}},
\end{equation}
where $v^{\text{hp}}$ is the velocity of the HEALPix pixel,
$v^{\text{HMI}}$ is the observed velocity from HMI,
$A_{\text{pix}}$ is the area of HEALPix pixel and
the integration is performed over the region of a HEALPix pixel.
Repeating this for each pixel, we obtain a HEALPix map
corresponding to the HMI Dopplergram image.
This map is used to obtain the observed spectral
parameters $(u_{st}, v_{st}, w_{st})$.
The linear relation in Eqn.~(\ref{eqn:mixing-matrix-compact})
may be used to determine the ``true'' spectral parameters $\tilde{\mathcal{U}}$ by inverting mixing-matrix
$\mathcal{M}$ in order to compute $\tilde{\mathcal{U}}$.
For $\ell_{\text{max}} = 1500$, $\mathcal{M}$
has a size $3,377,250 \times 3,377,250$.
This large matrix may be broken down into a number of
smaller dimensional sub-matrices, making the inversions
more tractable.
The coordinate transformation is shown for
$\mathcal{M}^{(uv)\ell m}_{st}$, but it holds for all the
sub-matrices given in Table~(\ref{tab:mixlist}).
The transformation involves moving the pole to disk-center,
which enables integration over the entire domain of the
azimuthal coordinate $\phi$.
Since all the VSH components are separable functions
in $\theta$ and $\phi$, with the dependence on $\phi$
appearing as a phase factor $\exp(im\phi)$,
where $m$ is the azimuthal quantum number,
the sub-matrices reduce to a function of only the
angular degrees $s, \ell$.

\begin{figure}[!ht]
\centering
\includegraphics[width=0.3\textwidth]{healpy_grid.pdf}
\caption{The boundary of a HEALPix pixel is shown in solid line with its coordinates
indicated by black dots. The HMI grid points are shown using dashed lines. The grid points
which lie within the chosen HEALPix pixel are shown in red and the points which lie outside
the pixel are in blue.}
\label{fig:healpy-hmi}
\end{figure}

\begin{align}
 \mathcal{M}^{(uv)st}_{\ell m} & = \int_0^{\pi} \sin\theta d\theta W(\theta)
 \int_0^{2\pi} d\phi \, \left( \hat{\vec{\ell}}\cdot \vec{\Psi}_{st}\right)
 \left( \hat{\vec{\ell}} \cdot \vec{Y}^*_{\ell m}\right) \nonumber \\
 & = \int_0^\pi \sin\theta \, d\theta \, W(\theta) f^s_\ell(\theta) \,
 \int_0^{2\pi} d\phi \exp(i(m-t)\phi) \nonumber \\
 & = \delta_{m}^t \int_0^\pi \sin\theta \, d\theta \, W(\theta)\, f_\ell^s(\theta),
\end{align}
where $f_\ell^s(\theta)$ is the $\theta$-dependent part of
\(\left( \hat{\vec{\ell}}\cdot \vec{\Psi}_{\ell m} \right)
  \left( \hat{\vec{\ell}} \cdot \vec{Y}^*_{st}\right)\).
It is seen that, in this coordinate system,
there is no mixing between different azimuthal quantum numbers. Hence, we may separate the linear equation
given by Eqn.~(\ref{eqn:mixing-matrix-compact}) into independent equations for each $0 \le m \le \ell_{\text{max}}$.
Since the mixing atrices for each azimuthal order are independent of each other, their
inverses are computed in a parallel fashion by using \texttt{GNU Parallel} by \cite{gnu-parallel}. These
matrices have very large null spaces; the mixing-matrices transform the true spectral parameters in to
the observed spectral parameters and hence there is a loss of information due to observing only
the line-of-sight component of half the solar surface.

The regularized inverse is computed
by using unit regularization.
\begin{equation}
 \tilde{\mathcal{U}} = \left( \mathcal{M}^T \mathcal{M} + \lambda I \right)^{-1} \mathcal{M}^T \mathcal{U},
\end{equation}
where $\lambda$ is the regularization parameter.

A similar analysis by \cite{rincon-2017} employed
CST to obtain the velocity spectrum. At the outset, we note
that CST generates robust estimates
of horizontal velocities. However, since the velocity is
measured by tracking granular structures, the spectrum
is limited to $\ell < 850$, whereas the current work
allows us to image up to $\ell = 1535$. The current work can be extended to
even higher $\ell$, provided sufficiently resolved
observations are available.

\section{Goodness of inversion}\label{sec:goodness-inversion}
The mixing matrix $\mathcal{M}$ transforms the complete velocity
spectrum on the entire surface of the Sun to the line-of-sight spectrum
on less than half the solar surface. Hence, $\mathcal{M}$ has a
large null-space; the observed spectrum is insensitive to
(a) components of velocity perpendicular to the line of sight, and
(b) all components of velocity on the farside of the Sun.
To understand how well the inversion is able to reproduce the
true spectra, we construct a variety of qualitatively
different synthetic spectra given below.

For sake of illustration, only synthetic tests for sectoral
harmonics are shown in Figure~\ref{fig:synth-sectoral}.
It is seen that the inversion of the poloidal component is
the most accurate. Inverted values of radial and toroidal
components are seen to follow the same power law,
but differ in magnitude when compared to the true spectrum.
The inversion tests for all the other cases are presented in
Appendix~\ref{appendix:synth-test}.
Across all the synthetic profiles, the inversion of
the poloidal component seems to be accurate and hence robust.
It is also observed that the inverted spectra of all
flow components are systematically
underestimated in the synthetic tests.

\begin{figure}[!ht]
    \centering
    \includegraphics[width=\textwidth]{sectoral.pdf}
    \caption{Comparison of actual (black) and inverted (red)
    velocity profiles for sectorally dominated synthetic spectra.
    The poloidal spectrum reproduction is significantly
    superior to the radial and toroidal spectra.}
    \label{fig:synth-sectoral}
\end{figure}

\section{Results and Discussion}\label{sec:results-discussion}
The HEALPix method involves constructing and heirarchically subdividing
the entire spherical surface. The number of subdivisions is denoted
by $n_d$ and the corresponding number of HEALPix pixels is given by
$12\times 4^{n_d}$, i.e., $n_d = 0$ corresponds to the largest pixels
where the sphere is equally divided into 12 pixels. All subsequent
refinement in pixel size involves dividing cells into
4 sub-divided cells and hence the number of pixels $N_\text{pix} = \{12, 48, 192 ...\}$.
Mapping the observed HMI Dopplergram to HEALPix involves
populating the pixels with observed data.
Using a very high resolution would result in a lot of ``holes''
in the remapped data. This happens when the pixel size using HEALPix
is smaller than the existing grid. A very low resolution
would result in loss of information at smaller spatial scales and hence
not preferred. For the 16 megapixel data from HMI, it was found
that the optimal $n_d = 9$ ($N_\text{side} = 512$ in HEALPix terminology).
For this resolution, HEALPix may accurately represent band-limited
signals up to spherical harmonic degree $\ell = 1535$. HEALPix also enables faster computation of spectrum as the
computation of spherical harmonic transform scales as
$\mathcal{O}(N_\text{pix}^{1/2})$,
thus making it attractive for processing of high-resolution data.

The mixing matrix is constructed for all $ m \le 1535$ and
inversion is performed to obtain the full spectrum.
We compare the results of inversion from forward modelling
of H15 and spectrum obtained from LCT in Figure~\ref{fig:compare3}. Supergranules have finite depth extents and are sensitive to flows at a range of sub-surface layers. The estimates of flow velocities that LCT (which uses supergranular motions) provides are thus likely to be different from those derived using Dopplergrams because the depth averaging in these two measurements is different. We would thus expect qualitative and approximate quantitative agreement between the two techniques.

While H15 estimates spectra for $\ell \le 4096$, the current work
is limited to $\ell \le 1535$ and LCT is limited to $\ell \le 383$.
The poloidal flow shows a clear peak at $\ell \approx 120$ which
is the well known peak of supergranulation.
This peak is seen in the spectrum obtained from LCT as well as H15.
Note that, although LCT and H15 are in good agreement over the range
$60 \lessapprox \ell \lessapprox 120$, they qualitatively differ for
$\ell \lessapprox 60$.
On the other hand, inferences from the current work
are in good qualitative agreement with LCT,
but the magnitudes are different.

As evident from the synthetic tests, the magnitude is an
underestimate of the true convective amplitudes.
Since supergranulation is dominantly poloidal, the peak near
$\ell=120$ should appear only in the radial and poloidal components.
However, it is seen that the supergranulation
peak appears in the toroidal flow inversion as well.
This is due to mode mixing and the inability of the
inversion to completely separate out the
poloidal from the toroidal component.
The ability of the inversion to distinguish between the
magnitudes of radial and poloidal flows hints at
limited contamination of radial flows by poloidal flows.

\begin{figure}[!ht]
 \centering
 \includegraphics[width=\textwidth]{doppler2_compare.pdf}
 \caption{Comparison of convective power spectrum from 3 different methods.
 The present work is indicated by solid black line.
 The spectrum obtain from LCT is shown as a dashed red line.
 The spectrum from H15 is shown in dash-dotted blue line. The present work agrees with inferences from LCT better than H15 for poloidal flow. LCT measures only horizontal velocity
 and hence the radial flow comparison is with H15 only.}
 \label{fig:compare3}
\end{figure}
Radial power increases with angular degree,
with spatial scales near granulation having the highest power, since granulation comprises strong
upflows and downflows.
The magnitude of the radial component is also underestimated
when compared with H15, although the fractional radial
convective power is in good agreement with previous
studies \citep{hathaway2002,hathaway2015}.  As shown in
Figure~\ref{fig:rad_power}, at lower $\ell$, the radial power
only corresponds to $5\%$ of the total power and
at $\ell \approx 1500$, it contributes almost
$8\%$. The peak radial velocity  at supergranular scales
is found to be 2.2 ms${}^{-1}$,
which is an underestimate when compared to \cite{duvall-birch-2010}
(4 ms${}^{-1}$), \cite{hathaway2002} (13 ms${}^{-1}$) and measurement of
20 ms${}^{-1}$ by \cite{rincon-2017}. It is also within the upper limit of
10 ms${}^{-1}$ set by \cite{giovanelli1980}.
\begin{figure}[!ht]
 \centering
 \includegraphics[width=0.6\textwidth]{rad_power.pdf}
 \caption{Fraction of total power contained in radial component as a function of
 spherical harmonic degree. The fraction increases with wavenumber.
 A supergranular peak at around $s=120$ is also seen here, hinting at its convective origin.
 Although the peak could be due to the contamination from the
 poloidal power, synthetic tests show that contamination is minimal
 (Appendix~\ref{sec:contamination}). The radial
 flow magnitude agrees more with the measurement of vertical RMS velocity
 \cite{duvall-birch-2010} than other measurements.}
 \label{fig:rad_power}
\end{figure}

To study the temporal characterisitcs of the inverted
convective flow spectra, we process 1 year's worth of data
at a rate of 1 image per day, with a maximum (Nyquist) frequency of
$5.6\, \mu$ Hz and a frequency bin size of $31.7$ nHz.
We compute the convective power in all the convective flow
components, as a function of spherical harmonic degree $\ell$ and
temporal frequency $\nu$. However, the contour plot of $\ell-\nu$ is
not informative, i.e., we do not observe clear
characteristic frequencies in radial, poloidal or
toroidal flow components.
Other studies of convection have observed supergranular waves which are
found to have oscillation periods of $\sim 2$ $\mu$Hz
\citep{gizon-2003, langfellner2018}.
Additionally \cite{hanasoge2020} estimated that the  toroidal flow power
increased significantly with temporal frequency.

Inversions for the full spectrum enable us to characterise the
shapes of convection at different length scales. Sectoral
harmonics show power concentrated at low latitudes. Tesseral harmonics have
power distributed across the entire surface and zonal harmonics
have axisymmetric structure. This classification can
be quantified using $\ell-|m|$, which quantifies the number of
nodes in latitude.
We plot the distribution of power as a function of $\ell - |m|$
for poloidal flows in Figure~\ref{fig:v-allpow} and for
toroidal flows in Figure~\ref{fig:w-allpow}.
Irrespective of the range of $\ell$, we observe that the
poloidal convective power is maximum for low $\ell - |m|$
i.e. sectoral harmonics. This is also seen to be in qualitative
agreement with LCT data, as seen in Figure~\ref{fig:compare-figw-s-|t|},
except at very low $\ell-|m|$. A more detailed comparison is
presented in Figs.~(\ref{fig:figv-s-|t|}, \ref{fig:figw-s-|t|})
of Appendix~\ref{sec:comparison-lct}.

{
Solar differential rotation is known to have conical
(as opposed to cylindrical) isorotation contours inside the
convection zone \citep{gilman-howe-2003}.
Theoretical modelling \citep{balbus2009} suggests that
a latitudinal temperature gradient is necessary both in the convection zone
and at the tachocline to sustain the observed rotational shear.
Non-cylindrical differential
rotation is driven by a combination of Reynolds stresses and a latitudinal temperature gradient
\citep{miesch2005lsrp}.
Measurements of surface temperatures
have shown latitudinal variations of a few K
\citep{kuhn1998, rast2008} with a
minimum at mid-latitudes.  A temperature minimum at mid-latitudes
also hints at preferred latitudes for convection and
could potentially be the reason for the peak at finite $\ell - |m|$ seen in the poloidal
flows shown in Figure~\ref{fig:compare-figv-s-|t|}.}

Seismic analyses by \cite{hanasoge2020} indicate that toroidal power peaks
at the equator and is very small beyond $\ell-|m| > 10$, for $\ell < 50$.
Our inversions here for toroidal flow power attain a maximum around
$\ell - |m| \sim 20$ (Figure~\ref{fig:w-allpow}) whereas LCT data
shows a dominant peak at $\ell - |m| \sim 100$.
However, given the poor reproduction of
toroidal spectrum in the synthetic tests, the results of
inverted toroidal flows are not reliable.

Understanding the origin of supergranulation has been
a long-standing challenge \citep{rieutord2010}.
`Realistic' numerical simulations (which account for
ionization and radiative transfer) have been successful at reproducing
granular scales \citep{stein-nordlund-1998}.
While \cite{rast2003} attributed supergranulation to be
emergent from advective interaction of granular plumes,
attempts at simulations at these scales have been made through
two different approaches
(a) global spherical simulations where supergranulation
corresonds to the smallest scale \citep[e.g][]{derosa-gilman-toomre-02}
and (b) local cartesian simulations where supergranulation is the
largest scale \citep[e.g.][]{cattaneo2001}.
\cite{schrijver1997} suggested that granular and supergranular
have very similar features (after accounting for length-scale differences);
the real utility in inversion-based observational
studies such as the present is that it provides full spectral information
of flows at these scales, useful for potentially detecting trends and benchmarking numerical simulations and seismic analyses.

Experimental studies of forced rotating turbulence have
shown the presence of a double turbulent cascade --
a direct cascade at smaller scales and an inverse cascade
at larger scales \citep{campagne-2014}. This is similar to
observed convective power around the the supergranular
length scales. While \citet{rincon-2017} observe an
$\ell^2$ scaling for convective
poloidal power for $\ell < 120$, we find that the scaling to be
closer to $\ell^4$, which is observed in homogeneous turbulence
\cite{batchelor-proudman-1956}; solar convection is known to be
neither homogeneous nor isotropic \citep[owing to
unstable stratification;][]{rincon-2007}. However,
the large null-space of the mixing-matrix prevents us from quantifying
the uncertainties in the inferred spectra and hence we are cautious about drawing detailed conclusions from these measurements.
The ratio of toroidal and poloidal flow power
can be used to identify the regime of turbulence that the Sun
operates in \citep[][experiments on Rayleigh-Bernard
convection]{horn-shishkina-2015}, and the present work
enables the characterization of the horizontal
flows at very high $\ell$.
The convective flow
power is found to flatten out at higher angular degrees
near the granular length scales, and
the present work would also be useful for the study
of convection at sub-granular length scales, when
higher resolution observations become available.\\

Some of the results in this paper have been derived using the healpy and HEALPix packages. SGK thanks Pranav Sampathkumar (Karlsruhe Institute of Technology) for help with HEALPix.
LCT data was generated by Bjoern Loeptien (Max Planck Institute for Solar System Research) and provided by
the authors of \cite{hanson2020}. SMH thanks R. Bogart (Stanford University) and D. Hathaway (NASA Ames) for useful conversation.
{The authors thank Aimee Norton (Stanford Univeristy)
for help with HMI data.}  The authors also thank
the anonymous referee for valuable suggestions that
helped improve the text in this  manuscript.

\begin{figure}[!ht]
 \centering
 \includegraphics[width=\textwidth]{compare_figv_t.pdf}
 \caption{Distribution of poloidal flow power as a function of azimuthal order:
 LCT data is in red and the present work is shown in black.
 The power falling at the largest $m$ are due to fewer
 modes being summed.}
 \label{fig:v-allpow}
\end{figure}

\begin{figure}[!ht]
 \centering
 \includegraphics[width=\textwidth]{compare_figw_t.pdf}
 \caption{Distribution of toroidal flow power as a function of azimuthal order.
 LCT data is shown in red and the present work is shown in black.
 Power declining at the highest $m$ is attributed to fewer
 modes being summed. LCT and inversion curves are different in both
 magnitude and trend.}
 \label{fig:w-allpow}
\end{figure}

\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{compare_figv_s-t.pdf}
\caption{Distribution of toroidal flow power as inferred
from LCT (red) and the current work (black).  A strong peak is observed
for inversions at very low $\ell-|m|$ which isn't seen in LCT data.}
\label{fig:compare-figv-s-|t|}
\end{figure}

\begin{figure}[!ht]
 \centering
 \includegraphics[width=\textwidth]{compare_figw_s-t.pdf}
 \caption{Distribution of toroidal flow power as inferred
from LCT (red) and the current work (black). The profiles from inversion
peak at low $\ell-|m|$ whereas LCT data attain their maximum at
intermediate $\ell-|m|$.}
\label{fig:compare-figw-s-|t|}
\end{figure}

\clearpage

redpajama_set_name: RedPajamaArXiv


text:
Fijian Tyre Stewardship Launched
In a bid to reduce waste and actually repurpose it for something productive, the Fijian government is funding the new Fijian Stewardship of Tyres with an allocation of $200,000 in the 2021-2022 financial year.
Fiji Moves to Deal with Tyre Problem
"It is a tragedy to see used tyres ending up in ditches by the road, strewn across the coast, and in our communities where they become breeding grounds for mosquitoes," said Attorney-General Aiyaz Sayed-Khaiyum while delivering the 2021- 2022 National Budget in July.
"Rather than being discarded and left to become unsightly breeding grounds for mosquitoes, they can actually be used for productive purposes.
"Through this new programme, we will be buying back used tyres and imposing a tyre recycling levy on all new and second-hand imported vehicles.
"We will also roll out a tyre-refund scheme for existing on-road tyres and for legacy tyres in dump yards, back yards and stockpiles."
He said the Ministry of Economy and the Climate Change Division of the Ministry of Waterways and Environment would work with tyre importers and retailers, local recycling companies and repair shops to get the programme off the ground and keep used tyres out of the environment.
"Fiji imports an average of around 290,000 tyres per year and an estimated 565,000 tyres are currently being used on Fijian roads.
"Through this programme, we expect to not only extend the value chain of tyres, but also create a vibrant recycling sector that can eventually spread throughout the Pacific.
"We also expect to use recycled shredded tyres in road construction initiatives such as rubberised asphalt.
"And FRA depots will be used to collect tyres and indeed they are currently in talks with the company that is going to mix bitumen with tyre crumb to lay on our roads."
Companies wishing to know more about the opportunities in the Fijian market should approach the commercial attaché at the relevant Embassy in their country.
Source: Fijian Times


text:
A Waltz Through Disney
The Tales Blog
The Shorts
Classic Shorts
New Mickey Mouse Shorts
The Shorts Blog
Colorful Shop
Mickey Mouse Short: Boiler Room
Season 2, Episode 9: "The Boiler Room" 10/2/14
Starring: Mickey Mouse
Co-starring: Minnie Mouse
Setting: Minnie's apartment building
Plot: When Minnie's apartment building's water heater is on the fritz, she enlists Mickey to fix it. But first, he must contend with the rumoured "monster" in the boiler room.
Short Stuff:
Released in October, this short coincides with the Halloween season.
There's no monster in the boiler room. It's just an angry water heater.
Why is the water heater angry? It's in a great deal of pain because someone left a wrench tightened on one of its pipes and the pressure has him all backed up.
Who left the wrench there and why? And, where is the apartment's superintendent?
There's a great payoff for the skeleton tenant who just has "dry skin." Once the water is back on, we seem him in the tub and it's revealed that he's a muscle-bound hunk!
Minnie's apartment is the same as Mickey's in Gasp! Although, it's clear Mickey no longer lives here since he refers to it as "your building's water heater."
This is also the third different apartment building we've seen Minnie living in after Fire Escape and Eau de Minnie.
Final Grade: C+
This is just another stock episode where Minnie is helpless and Mickey is the hero… *yawn.* As this season's "Halloween" episode, it's also a significant step back from the previous year's Ghoul Friend. I'm also not all that interested in spending a whole three minutes in a dingy, old apartment building's basement when we just got back from sailing the high-seas with Donald and traversing the Indian countryside with Mickey.
We love Disney. Period.


text:
The Nuclear Bunker Where America Preserves Its Audio-Visual Heritage
Kaushik Patowary Nov 28, 2016 0 comments
The Library of Congress has over 160 million items in its collection, including 23 million books, and more than 1.1 million films, and television programs ranging from motion pictures made in the 1890s to today's TV programs. It has the original camera negatives of 1903's The Great Train Robbery and Victor Fleming's Gone With The Wind. It even has all the sequels of Scary Movie and modern hit TV shows such as Judge Judy. The library also holds nearly 3.5 million audio recordings of public radio broadcasts and music, representing over a hundred years of sound recording history. It has films and audio on nearly all formats, from cylinders to magnetic tapes to CDs. It's the Noah's Ark of the creative history of the United States.
Most of the library's audio and video collections are stored in a Cold War bunker at the foothills of Blue Ridge Mountains in Culpeper, Virginia. Known as the Packard Campus of the National Audio-Visual Conservation Center, it is the Library of Congress's latest audiovisual archive storage facility.
The Packard Campus of the National Audio-Visual Conservation Center. Photo credit: Rien van Rijthoven
The Packard Campus was originally built in 1969 as a high-security storage facility where the Federal Reserve Board stored $3 billion in cash, so that it could replenish the cash supply east of the Mississippi River in the event of a catastrophic war with the Soviet Union. Like most nuclear bunkers built during the Cold War period, the radiation-hardened Packard Campus was constructed of steel-reinforced concrete one foot thick, had lead-lined shutters and was surrounded dirt strips and barbed-wire fences. The bunker could also house up to 540 people for a month. It had beds and freeze-dried food, an incinerator, indoor pistol range, a helicopter landing pad and a cold-storage area for bodies awaiting burial in case radiation levels were too high to go outside.
After the Cold War ended, the bunker was decommissioned and sat abandoned for four years before it was purchased by the David and Lucile Packard Foundation on behalf of the Library of Congress. Nearly $240 million was spent transforming the bunker into a state-of-the-art storage facility with more than 90 miles of shelving for collections storage, 35 climate controlled vaults for sound recording, safety film, and videotape, and 124 nitrate film vaults.
The facility houses 6.3 million collection items including all video and audio, as well as 2.1 million supporting scripts, posters, photos, etc. Its digital archive exceeds 1 million gigabytes. An astounding 22,000 new items published in the U.S. arrive every day at the Library, out of which an average of 10,000 items are added per day.
The Packard Campus regularly holds (nearly everyday) screenings of films of cultural significance in its 206 seat theater, which is open to the public.
Photo credit: www.greenroofs.com
Storage vaults at Packard Campus. Photo credit: Rien van Rijthoven
Vintage media equipment at Packard Campus. Photo credit: Leslie Johnston/Flickr
The theater where public screenings take place. Photo credit: Rien van Rijthoven
Sources: www.loc.gov / Wikipedia / www.aoc.gov / Wired / Washingtonian
Bunker History Landmarks USA


text:
import { expect } from 'chai';
import substituteValues from '../../src/utils/substitute-values';

describe('substituteValues', () => {
   it('throws an error when CONTEXT_VALUE not supplied', () => {
      expect(() => { substituteValues({ subjectID: 'foo' }, 'some-role', 'some:{CONTEXT_VALUE}'); })
         .to
         .throw('Role "some-role" depends on a context value, but none was supplied');
   });
});


text:
Cricket nut Gelmi scores dream job
In the the same team as Bruce McAvaney and Ricky Ponting and being paid to cover a sport she loves during a historic summer of cricket, Perth-bred sports journalist and presenter Abbey Gelmi readily admits she's in the middle of a "genuine pinch-me moment".
In less than four years, the former Sacred Heart student has gone from being a WA Academy of Performing Arts broadcast graduate to reading the news at Fox Sports in Sydney to crossing over to Seven's team covering the network's maiden cricket season.
Gelmi says she's more excited than nervous about her new cricketing role.
Her summer will include hosting duties for Big Bash League and Women's Big Bash League games and covering the colour and atmosphere from within the inner sanctums of the Baggy Green brigade and Swami Army during the Australia and India Test series, which started on Thursday.
"If someone had told me when I was younger that this is an opportunity I'd be presented with, I just wouldn't have believed it," she said.
Cricket-mad Gelmi hopes a bumper summer will allow everyone to put the notorious ball-tampering scandal that engulfed Australian cricket this year behind them.
"I think fans have just been waiting to see what this new-look Aussie team can do," she said.
"I think people are just ready to let the boys play.
"And I think there's been so many ramifications and so much fallout which — warranted or unwarranted — has damaged the game, at least its perception within Australia, but now's the time to just get behind what is a really good group of guys who have been through a lot."
Sport is not only Gelmi's calling, it's also part of her DNA.
Her grandfather is one of Australia's most legendary sporting figures — Olympic gold medal-winning 1500m runner Herb Elliott.
"For me he's always just been Grandpa … He talks more about AFL than he does running," said Gelmi, also a horse-racing presenter whose partner is Sky Racing's Ben Way.
Gelmi can't wait to experience Optus Stadium for the first time, with the Perth Test starting on Friday.
Hindu monks, activists rally in New Delhi demanding Ayodhya temple
Voters Do The Right Thing And Send Zephyr Tea
The eight unluckiest batsmen in Australian cricket
December 11, 2018 December 13, 2018 media
The Ravindra Jadeja Paradox
South Africa sweep Sri Lanka series after floodlight failure
March 17, 2019 March 17, 2019 Activitourist


text:
Sauer (fr. la Sauer, niem. Saarbach) – dopływ Renu o długości 70 km, z czego 64 w granicach Francji. Rzeka ma źródła w Lesie Palatynackim i przepływa m.in. przez Fischbach bei Dahn, Lembach, Betschforf i uchodzi do pod Munchhausen do Renu. Końcowy odcinek wchodzi w skład rezerwatu przyrody "Delta Sauer".

Zobacz też
 Rzeki Europy

Przypisy

Rzeki w departamencie Dolny Ren
Rzeki w Nadrenii-Palatynacie
Dorzecze Renu

redpajama_set_name: RedPajamaWikipedia


This will be my last S&S festival, at least in Penang. It's been a lot of fun, especially working with my talented students over the year and to see them excel on the community stage. We've won a lot of awards of the year, and it's been fun to reflect upon them during this last festival. I'm most proud of the remarkable string of Newcomer Awards my students have won over the years.
You'll notice that 2015 is missing in the list. Well, that's because the newcomer I had in my play last year, Lexi Zimbulis, actually went on to win the Best Actor Female award.
On top of all of that, I pitch in 3 best script awards (2013, 2014, 2015) and 1 best director award (2015).
It's a great festival for building and showcasing talent as well as for networking with other crazy theatre folks.
I'll always look fondly upon Short & Sweet Theatre Penang and wish it the best as it moves forward and as I move on.
This entry was posted in drama and tagged malaysia, short & sweet Penang, theatre by sassevn. Bookmark the permalink.